用C语言解释链表中元素的插入


链表使用动态内存分配,即它们会根据需要增长和缩小。它们被定义为节点的集合。在这里,节点有两个部分,分别是数据和链接。数据、链接和链表的表示如下:

链表操作

C语言中,链表有三种操作,如下:

  • 插入
  • 删除
  • 遍历

插入

举个例子,我们在节点2和节点3之间插入节点5。

现在,在开头插入节点5。

在末尾插入节点5。

在末尾插入节点5。

注意

  • 由于节点没有命名,我们无法在节点2之前插入节点5。
  • 如果给出其位置,我们可以将节点5插入到2之前。

C程序,用于在链表中插入元素

以下是用于在链表中插入元素的C程序:

在线演示

#include <stdio.h>
#include <stdlib.h>
struct node{
   int val;
   struct node *next;
};
void print_list(struct node *head){
   printf("H->");
   while(head){
      printf("%d->", head->val);
      head = head->next;
   }
   printf("……

"); } void insert_front(struct node **head, int value){    struct node * new_node = NULL;    new_node = (struct node *)malloc(sizeof(struct node));    if (new_node == NULL){       printf(" Out of memory");    }    new_node->val = value;    new_node->next = *head;    *head = new_node; } void insert_end(struct node **head, int value){    struct node * new_node = NULL;    struct node * last = NULL;    new_node = (struct node *)malloc(sizeof(struct node));    if (new_node == NULL){       printf(" Out of memory");    }    new_node->val = value;    new_node->next = NULL;    if( *head == NULL){       *head = new_node;       return;    }    last = *head;    while(last->next) last = last->next;    last->next = new_node; } void insert_after(struct node *head, int value, int after){    struct node * new_node = NULL;    struct node *tmp = head;    while(tmp) {       if(tmp->val == after) { /*found the node*/          new_node = (struct node *)malloc(sizeof(struct node));          if (new_node == NULL) {             printf("Out of memory");          }          new_node->val = value;          new_node->next = tmp->next;          tmp->next = new_node;          return;       }       tmp = tmp->next;    } } void insert_before(struct node **head, int value, int before){    struct node * new_node = NULL;    struct node * tmp = *head;    new_node = (struct node *)malloc(sizeof(struct node));    if (new_node == NULL){       printf("Out of memory");       return;    }    new_node->val = value;    if((*head)->val == before){       new_node->next = *head;       *head = new_node;       return;    }    while(tmp && tmp->next) {       if(tmp->next->val == before) {          new_node->next = tmp->next;          tmp->next = new_node;          return;       }       tmp = tmp->next;    }    /*Before node not found*/    free(new_node); } void main(){    int count = 0, i, val, after, before;    struct node * head = NULL;    printf("Enter no: of elements: ");    scanf("%d", &count);    for (i = 0; i < count; i++){       printf("Enter %dth element: ", i);       scanf("%d", &val);       insert_front(&head, val);    }    printf("starting list: ");    print_list(head);    printf("enter front element: ");    scanf("%d", &val);    insert_front(&head, val);    printf("items after insertion: ");    print_list(head);    printf("enter last element: ");    scanf("%d", &val);    insert_end(&head, val);    printf("items after insertion: ");    print_list(head);    printf("Enter an ele to insert in the list: ");    scanf("%d", &val);    printf("Insert after: ");    scanf("%d", &after);    insert_after(head, val, after);    printf("List after insertion: ");    print_list(head);    printf("Enter an ele to insert in the list: ");    scanf("%d", &val);    printf("Insert before: ");    scanf("%d", &before);    insert_before(&head, val, before);    printf("List after insertion: ");    print_list(head); }

输出

执行上述程序后,会产生以下结果:

Enter no: of elements: 4
Enter 0th element: 1
Enter 1th element: 2
Enter 2th element: 3
Enter 3th element: 4
starting list: H->4->3->2->1->......
enter front element: 5
items after insertion: H->5->4->3->2->1->......
enter last element: 0
items after insertion: H->5->4->3->2->1->0->......
Enter an ele to insert in the list: 6
Insert after: 0
List after insertion: H->5->4->3->2->1->0->6->......
Enter an ele to insert in the list: 7
Insert before: 5
List after insertion: H->7->5->4->3->2->1->0->6->......

更新于:2024年6月20日

3K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.