链表的插入_删除
来源:互联网 发布:淘宝的购物评级怎么涨 编辑:程序博客网 时间:2024/06/05 11:13
#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define true 1#define false 0#define OK 1typedef struct L_list{ int data;//数据域 struct L_list *pNext;}LIST, *pLIST;pLIST create_list(int len);//创建一个单链表;bool Show_list(pLIST pHead);//遍历输出;bool delete_list(pLIST pHead, int i);//删除第i个位置的元素bool Insert_list(pLIST pHead, int val, int e);//在第val个位置插入元素,e为要插入的元素;int main(void){ int len;//len为要生成节点的个数 int sum;//sum为要删除元素的位置 int val, e;//val为要插入元素的位置,e为插入到的元素 pLIST pHead = NULL; printf_s("请输入需要生成链表结点的个数"); scanf_s("%d", &len); pHead = create_list(len); Show_list(pHead);//遍历输出 printf("请输入需要删除第几个元素:"); scanf_s("%d", &sum); delete_list(pHead, sum); Show_list(pHead);//遍历输出 printf("请输入需要在第几个位置插入元素几:"); scanf_s("%d%d", &val, &e); Insert_list(pHead, val, e); Show_list(pHead);//遍历输出 return 0;}pLIST create_list(int len)//创建一个单链表;{ //int leng=len;//存放数据的长度 int i; int val;//用于存放用户临时输入结点的值 pLIST pTail = (pLIST)malloc(sizeof(LIST));//生成一个头结点 if (pTail == NULL) { printf_s("头结点生成失败"); exit(-1); } pLIST pLast = pTail;//建立一个临时的点,类似于结点 pLast->pNext = NULL;//将他的指针域初始化为空 for (i = 0; i < len; ++i)//给结点的数值域赋值 { printf_s("请输入第%d个结点的值", i + 1); scanf_s("%d", &val);//将输入的值临时存放在val中 pLIST pNew = (pLIST)malloc(sizeof(LIST));//生成一个新结点 if (pNew == NULL)//判断是否生成成功 { printf("新结点生成失败!"); exit(-1); } else { pNew->data = val;//将输入的值赋值给新节点 pLast->pNext = pNew;//把链表结点的指针域指向新节点的指针域 pNew->pNext = NULL;//把新节点的指针域清空 pLast = pNew;//把新节点的指针域化为尾结点的指针域 } } return pTail;//返回头结点}bool Show_list(pLIST pHead)//显示输出{ pLIST p = pHead->pNext; printf("链表的元素为:"); while (p != NULL) { printf("%3d", p->data); p = p->pNext; } printf("\n"); return true;}bool delete_list(pLIST pHead, int i)//删除第i个位置的元素{ pLIST pLast = pHead;//建立一个临时的点,类似于结点 //pLast->pNext = NULL;//将他的指针域初始化为空 int j = 0; if (pHead->data == NULL) printf("链表为空,删除失败!"); else { while (pHead->pNext&&j < i - 1)//循环找到需要删除的位置 { pHead = pHead->pNext; ++j; } //语文不好,注释不准确请到P30页自己慢慢理解去类似 pLast = pHead->pNext;//将要删除元素的地址的指针域赋值给plast pHead->pNext = pLast->pNext;//将该指针域的指针域赋值给上有一个元素的指针域 free(pLast);//释放临时存储元素的值,防止内存泄漏 } return true;}bool Insert_list(pLIST pHead, int val, int e)//在第val个位置插入元素;{ pLIST p = (pLIST)malloc(sizeof(LIST));//生成一个新的节点 int j = 0; if (pHead->data == NULL) printf("链表为空,插入失败!"); else { while (pHead->pNext&&j < val - 1)//循环找到需要插入的位置 { pHead = pHead->pNext; ++j; } p->data = e;//将要插入的值给新节点 p->pNext = pHead->pNext;//将新节点的指针域指向插入位置的下一个节点 pHead->pNext = p;//将上一个节点的指针域指向他 return true; }}
阅读全文
1 0
- 链表的插入_删除
- 【郝斌数据结构自学笔记】27-29_链表插入和删除算法的演示_复习
- 链表的插入、删除
- 链表的插入、删除
- 数据结构_线性表_顺序表 的创建,插入,删除,查找
- 程序员面试宝典_链表基本操作,建立,求长,删除和插入特定值的结点
- 链表插入删除
- 链表插入删除
- 链表插入删除
- pta_链表_递增的整数序列链表的插入_(插入创建操作)
- 链表的建立、插入和删除
- 链表的建立插入与删除
- 链表的建立、插入和删除
- 链表的创建,插入,删除
- 链表的创建,插入,删除,逆序
- 链表的创建、插入、删除操作
- 链表的插入 删除 排序 倒叙
- 链表的创建、查询、插入、删除
- include指令与include动作之间的区别
- 高并发解决方案
- double,float浮点型精确运算
- 算法竞赛学习日记(1)——“贪心法”
- NOIP2013 试做总结
- 链表的插入_删除
- 函数调用约定
- JAVA内存模型和线程安全
- 讯为Exynos4412开发板例程及注释——LED
- 【20170929】python_语言设计(1)基本语法
- 关于矩阵存在共线性的第二谈
- PKU 3281 Dining
- 指针和引用详细比较
- 调用浏览器的打印预览