链表创建 删除 插入 逆置 打印 释放内存
#include <stdio.h> #include <stdlib.h> #include <string.h>//定义类型 typedef struct Stlianbiao {char name[20];struct Stlianbiao *next; }SLB;void createLB(SLB **head) {//定义辅助指针SLB *p = NULL;SLB *cur = NULL;SLB *c = NULL;//定义接受字符串变量char name[20];//判断指针是否合法if (head == NULL){printf("createLB ERROR..");return;}//分配头指针内存p = (SLB *)malloc(sizeof(SLB));memcpy(p->name, "head", 20);p->next = NULL;//赋值当前指针cur = p;printf("ENTER A NAME TO CREATE A BL,0 TO EXIT:");//输出姓名scanf("%s", name);//当输入字符串为0时候停止循环while (strcmp(name,"0") != 0){//分配内存c = (SLB *)malloc(sizeof(SLB));memcpy(c->name, name, sizeof(name));c->next = NULL;//连接cur->next = c;//移动当前指针cur = c;//下一项printf("ENTER A NAME TO CREATE A BL,0 TO EXIT:");//输出姓名scanf("%s", name);}//指针作输出*head = p; }//删除指定项 void delLB(SLB *head,char *name) {//定义辅助指针SLB * cur = NULL, *pre = NULL;//判断指针是否合法if (head == NULL){printf("delLB ERROR..");return;}pre = head;cur = head->next;while (cur){//如果找到指定项则删除并中断循环if (!strcmp(cur->name,name)){pre->next = cur->next;free(cur);break;}//移动辅助指针pre = cur;cur = pre->next;} }//在指定项面前插入项 如果没有指定项则在最后插入项 void insertLB(SLB *head, char *name,char *in) {//定义辅助指针SLB * cur = NULL, *pre = NULL,*c =NULL;//判断指针是否合法if (head == NULL){printf("insertLB ERROR..");return;}pre = head;cur = head->next;while (cur){//当前项是要找的项则退出遍历if (!strcmp(cur->name, name)){break;}//移动指针pre = cur;cur = pre->next;}//分配内存c = (SLB *)malloc(sizeof(SLB));memset(c->name, 0, 20);memcpy(c->name, in, 20);//插入操作c->next = cur;pre->next = c; }//遍历打印链表 void printLB(SLB *head) {//判断指针是否合法if (head == NULL){printf("printLB ERROR..");return;}//开始打印printf("START ");head = head->next;while (head){printf("%s ", head->name);//移动指针head = head->next;}//结束打印printf(" END\n"); }//释放内存 void freeLB(SLB **head) {//当前指针SLB * cur = NULL;//判断指针是否合法if ((*head) == NULL){printf("freeLB ERROR..");return;}//释放后面的项cur = (*head)->next;while (cur){//断开当前指针 连接应当相邻指针(*head)->next = cur->next;//释放当前指针free(cur);//移动当前指针cur = (*head)->next;}//释放头指针free(*head);//避免野指针*head = NULL; }//链表逆置 void reverseLB(SLB *head) {//定义辅助指针 temp缓存指针SLB * temp = NULL, *p = NULL, *q = NULL;//头指针为空错误if (head == NULL){printf("reverseLB ERROR..");return;}//只有一项一下则不需要逆置if (head->next == NULL || head->next->next == NULL){printf("reverseLB is the same..");return;}//p q分别为第一 第二项p = head->next;q = p->next;while (q != NULL){//缓存下一项temp = q->next;//逆置q->next = p;//移动指针p = q;q = temp;}//处理剩余的head->next->next = NULL;head->next = p; }void main() {//定义一个头指针SLB *head = NULL;//指针作输出 创建头指针并创建链表createLB(&head);printLB(head);//链表逆置 reverseLB(head);printLB(head);//删除 删除链表中名字为20的项delLB(head, "20");printLB(head);//插入 在30之前插入300 如果不存在30则在最后插入300insertLB(head, "30", "300");printLB(head);//插入 在200之前插入20000 如果不存在30则在最后插入300insertLB(head, "200", "20000");printLB(head);//释放内存 用二级指针 避免野指针freeLB(&head);system("pause"); }
转载于:https://www.cnblogs.com/godehi/p/8535019.html
链表创建 删除 插入 逆置 打印 释放内存相关推荐
- 顺序表创建和就地逆置
顺序表创建和就地逆置 本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListReverse_Sq(Sq ...
- 6-1 顺序表创建和就地逆置 (10 分)
6-1 顺序表创建和就地逆置 (10 分) 本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListRe ...
- 无头结点单链表的逆置_单链表的增删查 逆置 倒数第k个节点等问题
对于单链表而言,它没有双链表那么复杂,它只有头节点,尾节点,节点数据,后继指针.在下面本人实现了 单链表的 增 删 插 查 改. #include #include #include #i ...
- 单链表的应用 就地逆置
[问题描述]试实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,a3....an)逆置为(an...a3,a2,a1). [分析]就地逆置就是不需要额外申请结点空间,只需要利用原 ...
- python实现带头结点的单链表的就地逆置_设头指针为head,编写算法实现带头结点单链表head的就地逆置...
链表问题大全!!!刚出炉的还热乎呢!! #include #include typedef struct node { int nDate; struct node *pstnext; }Node; ...
- 链表基础操作及其逆置
纠结了很久的一道链表题.果然我数据结构学得好渣.纠结了大约两个星期.最后提交作业的时间都截止了,还没交,再交的时候过期了,交不了了.只好跟老师说声,然后她又改了时间. 最后总结出了是我的指针和结构体学 ...
- c语言链表实现数组逆置,数组与链表等顺序表逆置
一)数组的逆置 (1)算法 #indclude #define N 8 main() { int array[N] = {100,90,80,70,60,50,50,40}; int i,j,t; ...
- (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
http://blog.csdn.net/fisherwan/article/details/25557545 前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了, ...
- python链接数据库并创建/删除/插入多个数据库/表/表数据
import pymysql l链接数据库并执行sql语句 conn = pymysql.connect(host='10.245.251.61',user='stashlog',password=' ...
最新文章
- 关于纯cs3动画的五个原创实例分享
- Linux 使用记录
- 2017-2018-1 20155330 《信息安全系统设计基础》第11周学习总结
- iBatis学习第一天
- js里apply方法的简单实例
- 下一个嵌入式大神,难道不是你吗?
- python中函数的参数类型( 位置参数、关键字参数、默认值参数和可变长度参数)
- 【LeetCode - 443】压缩字符串(模拟)
- javascript 懒加载技术(lazyload)简单实现
- Qt笔记-桌面应用程序加载字体库(ttf)
- php判断字符串里有英文,PHP针对中英文混合字符串长度判断及截取方法示例
- linux打印jvm内存堆栈_jvm内存堆栈监控之jmap篇
- python 构造函数传参_C++和python混合编程之在python类构造函数中传参方法
- mongodb索引 多健索引
- MATLAB画图函数plot简单用法
- Visual Studio 2015 安装教程(附安装包)
- 平面设计之PS(前)
- php打印直角三角形,中考几何丨通过构造直角三角形斜边上的中线结合中位线解决问题!...
- 苹果iPhone14系列在国内供应链厂商有哪些?
- INK1003注意事项