欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 人文社科 > 生活经验 >内容正文

生活经验

C语言的单链表创建:头插法/尾插法

发布时间:2023/11/27 生活经验 88 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C语言的单链表创建:头插法/尾插法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

          • 前言
          • 链表头插法
          • 链表尾插法
          • 源码实现

前言

接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了。

链表数据结构得提出 是为了弥补数组上 元素插入、删除导致大量元素移动得缺点,这里将C语言得指针提取出来构造一个指针管理得存储数据得结构,使用链式得方式消耗极少对资源(指针的指向,地址得删除)能够对单个元素得插入删除进行操作。

链表头插法

基本操作如下:

  1. 新节点得next域指向头节点的next域即可
  2. 头节点的next域指向新节点
    实现如下(文末有完整C代码):
    Data *insert_head(Data *head, int n) {head = (Data *)malloc (sizeof(Data));head -> next = NULL;int data;while(n --) {Data *p = (Data *)malloc(sizeof(Data));scanf("%d",&data);p -> data = data;p -> next = head -> next;head -> next = p;}return head;
    }
    
链表尾插法

基本操作如下:

  1. 先将保留尾部的指针的next域指向新节点
  2. 新节点的next域执行尾节点标记NULL
  3. 更新保留部的节点
    实现如下:
    Data *insert_tail(Data *head, int n) {head = (Data *)malloc(sizeof(Data));head -> next = NULL;Data *r = head;int data;while(n--) {Data *p = (Data *)malloc(sizeof(Data));scanf("%d", &data);p -> data = data;r -> next = p;r = p;p -> next = NULL;}return head;
    }
    
源码实现
#include <stdio.h>
#include <stdlib.h>typedef struct link_list {int data;struct link_list *next;
}Data;void print_list(Data *head) {while (head) {printf("%d ",head->data);head = head -> next;}printf("\n");
}Data *insert_head(Data *head, int n) {head = (Data *)malloc (sizeof(Data));head -> next = NULL;int data;while(n --) {Data *p = (Data *)malloc(sizeof(Data));scanf("%d",&data);p -> data = data;p -> next = head -> next;head -> next = p;}return head;
}Data *insert_tail(Data *head, int n) {head = (Data *)malloc(sizeof(Data));head -> next = NULL;Data *r = head;int data;while(n--) {Data *p = (Data *)malloc(sizeof(Data));scanf("%d", &data);p -> data = data;r -> next = p;r = p;p -> next = NULL;}return head;
}int main() {Data *head;int i ,b ;printf("construct head link list :\n");head = insert_tail(head,5);Data *test = head -> next;print_list(test);printf("construct tail link list :\n");head = insert_tail(head,5);Data *test = head -> next;print_list(test);return 0;
}

输出如下,很明显能够看到头插法和尾插法的输出情况:

construct head link list :
1 2 3 4 5
5 4 3 2 1 
construct tail link list :
1 2 3 4 5
1 2 3 4 5 

总结

以上是生活随笔为你收集整理的C语言的单链表创建:头插法/尾插法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。