介绍

在C语言中,链表是一种非常常见的数据结构,可以用来存储一组数据并且可以动态地进行插入、删除等操作。正序链表是一种特殊的链表,它的每一个节点按照一定的顺序进行排列,通常是从小到大或从大到小。

正序链表的建立

建立正序链表需要注意以下几点:

  1. 首先需要定义一个头节点和一个尾节点,它们的值可以为任意值,但是它们的指针都应该为空。
  2. 定义一个新节点,用来存储要插入的数据,然后按照顺序找到新节点应该插入的位置。
  3. 在找到新节点应该插入的位置后,需要将新节点插入到链表中,并且更新头节点和尾节点的指针。

下面是一段示例代码,用来建立一个正序链表:

#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>