c语言实现链表的基本操作
一、链表的概念及特点
链表是一种动态数据结构,它通过指针将一系列节点串联起来,每个节点都包含一个数据域和一个指向下一个节点的指针域。链表相比于数组具有以下特点:
1. 链表的长度可以动态变化,不需要预先分配固定大小的内存空间;
2. 链表的插入和删除操作效率高,时间复杂度为O(1);
3. 链表的访问操作效率较低,时间复杂度为O(n)。
二、链表的基本操作
1. 初始化链表
初始化链表需要创建一个头节点,并将头节点的指针域置为NULL。头节点不存储数据,只作为整个链表的起始点。
2. 在链表尾部添加元素
在链表尾部添加元素需要遍历整个链表到最后一个节点,并将其指针域指向新创建的节点。
3. 在链表中插入元素
在链表中插入元素需要先到要插入位置之前的节点,并修改其指针域使其指向新创建的节点。同时,新创建的节点需要指向原来位置之后的那个节点。
4. 删除链表中某个元素
删除某个元素需要先到该元素所在位置之前和之后的两个节点,并将前面一个节点的指针域指向后面一个节点。同时,需要释放被删除节点的内存空间。
5. 遍历链表
遍历链表需要从头节点开始,依次访问每个节点的数据域,并将指针指向下一个节点。
三、C语言实现链表的基本操作
1. 初始化链表
```c
typedef struct node{
    int data;
    struct node *next;
}Node;
Node* initList(){
    Node *head = (Node*)malloc(sizeof(Node));
    head->next = NULL;
    return head;
}
```
2. 在链表尾部添加元素
```c
void addNode(Node *head, int data){
    Node *p = head;
    while(p->next != NULL){
        p = p->next;
    }
    Node *newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;
    p->next = newNode;
}
```
3. 在链表中插入元素
```c
void insertNode(Node *head, int index, int data){
    Node *p = head;
    for(int i=0; i<index-1; i++){
        if(p == NULL){
            printf("Error: Index out of range!\n");
            return;
        }
        p = p->next;
    }
    Node *newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = p->next;
    p->next = newNode; 
}
```
4. 删除链表中某个元素
```c
void deleteNode(Node *head, int index){
    Node *p = head, *q;
    for(int i=0; i<index-1; i++){
        if(p == NULL || p->next == NULL){
            printf("Error: Index out of range!\n");
            return;
        }
        p = p->next;
    }
    q = p->next;
    p->next = q->next;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。