欢迎访问宙启技术站
智能推送

【C语言数据结构】单链表

发布时间:2023-05-16 22:32:05

单链表是一种常见的数据结构,它由一组节点组成,每个节点包含两个信息:数据和指向下一个节点的指针。单链表的特点是数据元素的逻辑顺序与物理顺序不一定相同,数据元素对应的地址是通过指针相互连接而实现的。

单链表的实现方式是每个节点包含数据和指向下一个节点的指针,最后一个节点的指针指向空NULL。对于单链表的操作有:插入、删除、查找、遍历等。由于单链表的插入和删除只需要改变指针指向,所以效率很高。

在C语言中,实现单链表可以采用结构体和指针相结合的方式。例如:

typedef struct node 

{

    int data; //数据域

    struct node* next; //指针域

}Node;

Node* create() //创建空表

{

    Node* head;

    head = (Node*)malloc(sizeof(Node)); //申请头节点

    head->next = NULL; //指针域指向NULL

    return head;

}

void insert(Node* head,int x) //在表头插入数据x

{

    Node* p;

    p=(Node*)malloc(sizeof(Node)); //申请新节点

    p->data=x;

    p->next=head->next; //插在表头

    head->next=p;

}

void delete(Node* head,int x) //删除数据x

{

    Node *p, *pre;

    p = head->next;

    pre = head;

    while(p != NULL) //遍历链表

    {

        if(p->data == x)

        {

            pre->next = p->next; //修改指针

            free(p); //释放节点内存

            break;

        }

        pre = p;

        p = p->next;

    }

}

Node* find(Node* head,int x) //查找数据x

{

    Node* p;

    p=head->next;

    while(p != NULL)

    {

        if(p->data == x)

            return p;

        p=p->next;

    }

    return NULL;

}

void traverse(Node *head) //遍历链表

{

    Node *p;

    p = head->next;

    while(p != NULL)

    {

        printf("%d ", p->data); //输出数据

        p = p->next; //指向下一个节点

    }

}

void destroy(Node* head) //删除整个链表

{

    Node* p;

    while(head != NULL)

    {

        p = head;

        head = head->next;

        free(p);

    }

}

以上是单链表的基本操作,可以根据实际需求进行改变。同样的,单链表也有缺点,就是无法进行快速的逆向遍历。此外,由于每个节点都需要存储指针,空间开销较大。

总之,单链表是C语言中非常常见的数据结构,学好它对程序开发是非常有帮助的。