#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

链表创建 删除 插入 逆置 打印 释放内存相关推荐

  1. 顺序表创建和就地逆置

    顺序表创建和就地逆置 本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListReverse_Sq(Sq ...

  2. 6-1 顺序表创建和就地逆置 (10 分)

    6-1 顺序表创建和就地逆置 (10 分) 本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListRe ...

  3. 无头结点单链表的逆置_单链表的增删查 逆置 倒数第k个节点等问题

    对于单链表而言,它没有双链表那么复杂,它只有头节点,尾节点,节点数据,后继指针.在下面本人实现了 单链表的 增   删   插  查  改. #include #include #include #i ...

  4. 单链表的应用 就地逆置

    [问题描述]试实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,a3....an)逆置为(an...a3,a2,a1).    [分析]就地逆置就是不需要额外申请结点空间,只需要利用原 ...

  5. python实现带头结点的单链表的就地逆置_设头指针为head,编写算法实现带头结点单链表head的就地逆置...

    链表问题大全!!!刚出炉的还热乎呢!! #include #include typedef struct node { int nDate; struct node *pstnext; }Node; ...

  6. 链表基础操作及其逆置

    纠结了很久的一道链表题.果然我数据结构学得好渣.纠结了大约两个星期.最后提交作业的时间都截止了,还没交,再交的时候过期了,交不了了.只好跟老师说声,然后她又改了时间. 最后总结出了是我的指针和结构体学 ...

  7. c语言链表实现数组逆置,数组与链表等顺序表逆置

    一)数组的逆置 (1)算法 #indclude #define N  8 main() { int array[N] = {100,90,80,70,60,50,50,40}; int i,j,t; ...

  8. (C++版)链表(一)——实现单向链表创建、插入、删除等相关操作

    http://blog.csdn.net/fisherwan/article/details/25557545 前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了, ...

  9. python链接数据库并创建/删除/插入多个数据库/表/表数据

    import pymysql l链接数据库并执行sql语句 conn = pymysql.connect(host='10.245.251.61',user='stashlog',password=' ...

最新文章

  1. 关于纯cs3动画的五个原创实例分享
  2. Linux 使用记录
  3. 2017-2018-1 20155330 《信息安全系统设计基础》第11周学习总结
  4. iBatis学习第一天
  5. js里apply方法的简单实例
  6. 下一个嵌入式大神,难道不是你吗?
  7. python中函数的参数类型( 位置参数、关键字参数、默认值参数和可变长度参数)
  8. 【LeetCode - 443】压缩字符串(模拟)
  9. javascript 懒加载技术(lazyload)简单实现
  10. Qt笔记-桌面应用程序加载字体库(ttf)
  11. php判断字符串里有英文,PHP针对中英文混合字符串长度判断及截取方法示例
  12. linux打印jvm内存堆栈_jvm内存堆栈监控之jmap篇
  13. python 构造函数传参_C++和python混合编程之在python类构造函数中传参方法
  14. mongodb索引 多健索引
  15. MATLAB画图函数plot简单用法
  16. Visual Studio 2015 安装教程(附安装包)
  17. 平面设计之PS(前)
  18. php打印直角三角形,中考几何丨通过构造直角三角形斜边上的中线结合中位线解决问题!...
  19. 苹果iPhone14系列在国内供应链厂商有哪些?
  20. INK1003注意事项

热门文章

  1. 让数据多跑路——如何为政务服务办事材料减负
  2. 转载:这三个问题正在成为打车软件的致命伤
  3. Antd Upload 文件上传,自定义上传错误信息
  4. 大学计算机导学,大学计算机一级——导学.ppt
  5. 2019年英语六级翻译
  6. 王者荣耀五周年,带你入门Python爬虫基础操作!
  7. 计算机视觉——期末复习(填空、名词解释)
  8. Redis 16 个常见的使用场景
  9. 关于cpu逻辑核数、物理核数、核数的理解
  10. 基于C++与QT仿照羊了个羊规则的鸿了个鸿贴图游戏