单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)
来源:互联网 发布:手机摄像头软件测试 编辑:程序博客网 时间:2024/06/02 08:49
单链表的定义:
单链表是一种顺序存储的结构。
有一个头结点,没有值域,只有连域,专门存放第一个结点的地址。
有一个尾结点,有值域,也有链域,链域值始终为NULL。
所以,在单链表中为找第i个结点或数据元素,必须先找到第i - 1 结点或数据元素,而且必须知道头结点,否者整个链表无法访问。
单链表的综合操作:
#include <stdio.h>#include <stdlib.h>/* 创建一个节点,并为这个节点起一个别名Node */typedef struct node{ int num; struct node * next;}Node;typedef Node * link;/* 创建无表头单链表 */void create_link(link * head){ *head = NULL;}/* 单链表的头插 */void insert_head_node(link * newnode, link * head){ (*newnode)->next = * head; * head = (*newnode);}/* 单链表的中插 */int insert_mid_node(int num, link *newnode, link * head){ if (*head == NULL) { return -1; } link temp = *head; while (temp != NULL) { if (temp->num == num) { (*newnode)->next = temp->next; temp->next = (*newnode); return 0; } temp = temp->next; } return -1;}/* 单链表的尾插 */void insert_tail_node(link * newnode, link * head){ link temp = *head; if (*head == NULL) { (*newnode)->next = NULL; *head = *newnode; } else { while (temp->next != NULL) { temp = temp->next; } temp->next = *newnode; (*newnode)->next = NULL; }}/*单链表的遍历显示*/void display_node(link * head){ link temp = * head; while (temp != NULL) { printf("%d\n", temp->num); temp = temp->next; }}/* 单链表的删除 */int delete_node(int dnum, link *head){ if (*head == NULL) { return -1; } link temp = *head; if ((*head)->num == dnum) { (*head) = (*head)->next; free (temp); temp = NULL; return 0; } link d_temp = temp; temp = temp->next; while (temp != NULL) { if ((temp->num) == dnum) { d_temp->next = temp->next; free(temp); temp = NULL; return 0; } d_temp =temp; temp = temp->next; }}/* 单链表的逆序 */int reverse_node(link *head){ if (*head == NULL) { return -1; } if ((*head)->next == NULL) { return -1; } link str = *head; link ptr = str->next; link temp = ptr->next; while (temp != NULL) { ptr->next = str; str = ptr; ptr = temp; temp = temp->next; } ptr->next = str; (*head)->next = NULL; *head = ptr;}/* 主函数 */int main(){ int i; int set; /* 想要插入(中插)的位置 */ int likenum; /* 想要插入(中插)的元素 */ int deletenum; /* 想要删除的元素 */ link head; link newnode; /* 创建单链表 */ create_link(&head); /* 循环插入十个元素 */ for (i = 0; i < 10; i++) { newnode = (link)malloc(sizeof(Node)); if (newnode == NULL) { printf("malloc newnode error!\n"); } newnode->num = i + 1; /*下面的头插和尾插方式选择一种就可以了 一般的头插得到的序列是反的 所以我们一般采用尾插*/ //insert_head_node(&newnode, &head); //头插 insert_tail_node(&newnode, &head); //尾插 } printf("1-10 link is\n"); display_node(&head); printf("the reverse link following:\n"); reverse_node(&head); display_node(&head); newnode = (link)malloc(sizeof(Node)); printf("please input your like number!\n"); scanf("%d", &likenum); newnode->num = likenum; printf("please input number (only 1-10)\n"); scanf("%d",&set); insert_mid_node(set, &newnode, &head); //中插 printf("the insert result is:\n"); display_node(&head); printf("please input you want to delete num!\n"); scanf("%d",&deletenum); delete_node(deletenum, &head); printf("The delete result is\n"); display_node(&head); return 0;}
运行结果
此代码是我写的一个单链表的demo可以直接复制运行。
如果你对这方面不懂的或者初学者。可以用这个demo自己改装做一个通讯录管理系统。将结构体扩大不仅仅存储num。存储学生信息,传递结构体即可,相信做完你会有更大的进步。
1 0
- 单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)
- 双向循环链表的头插、中插、尾插、删除、逆序顺序显示(C++实现)
- 【C语言】静态顺序表的实现(包括头插、头删、尾插、尾删、查找、删除指定位置)
- C语言实现链表的头插,尾插,插入,修改,删除和遍历
- C语言:单链表的实现(包括:尾插、尾删、头插、头删、指定位置插入、长度、打印)
- 单链表的头插 尾插 反序 遍历 插入 删除
- 单链表的头插、尾插、删除、合并等操作
- C++语言实现单链表的尾插,尾删,头插,头删等
- 数组的链表实现:创建(头插/尾插)、打印、删除、插入
- 实现链表逆序(头插)
- 实现链表逆序(头插)
- 单链表初始化,头插,尾插,查找,删除
- 单向循环链表的头插,尾插,中间插以及删除节点
- 建立单链表【头插,尾插】
- 链表的创建(头插,尾插),插入,删除
- 链表的插入(头插,尾插,中间插)
- 数据结构中静态顺序表的初始化、尾插、尾删、头插、头删、任意位置的插入及删除
- C语言【顺序表】顺序表的初始化,头插,尾插,头删,尾删,增删查改,全删
- c#的接口详解
- MATLAB中的矩阵索引
- 解决文件名冲突问题(针对处理后的图片)
- hdu5667
- 二分查找Strange fuction
- 单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)
- zoj3329(概率dp)
- 数据结构 C语言 严蔚敏版 算法2.1
- AYITACM2016省赛第一周(深搜) E - A Knight's Journey骑士的旅行
- Tomcat学习笔记 startup.bat 与shutdown.bat
- 图像处理之-位图(未完待續)
- 3.java之复合运算符
- protobuf的编译与安装(教程)附带资源(亲测,Mac下可以用)
- Program2_1020