介绍
在C语言中,链表是一种非常常见的数据结构,可以用来存储一组数据并且可以动态地进行插入、删除等操作。正序链表是一种特殊的链表,它的每一个节点按照一定的顺序进行排列,通常是从小到大或从大到小。
正序链表的建立
建立正序链表需要注意以下几点:
- 首先需要定义一个头节点和一个尾节点,它们的值可以为任意值,但是它们的指针都应该为空。
- 定义一个新节点,用来存储要插入的数据,然后按照顺序找到新节点应该插入的位置。
- 在找到新节点应该插入的位置后,需要将新节点插入到链表中,并且更新头节点和尾节点的指针。
下面是一段示例代码,用来建立一个正序链表:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node* next;
} Node;
Node* create(int* arr, int len)
{
Node* head = NULL;
Node* tail = NULL;
for (int i = 0; i < len; i++)
{
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = arr[i];
new_node->next = NULL;
if (head == NULL)
{
head = new_node;
tail = new_node;
}
else
{
Node* p = head;
Node* prev = NULL;
while (p != NULL && p->data < new_node->data)
{
prev = p;
p = p->next;
}
if (prev == NULL)
{
new_node->next = head;
head = new_node;
}
else
{
prev->next = new_node;
new_node->next = p;
}
if (new_node->next == NULL)
{
tail = new_node;
}
}
}
return head;
}
int main()
{
int arr[] = {5, 2, 7, 4, 1};
int len = sizeof(arr) / sizeof(int);
Node* head = create(arr, len);
Node* p = head;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
</stdlib.h></stdio.h>
暂无评论