C语言 链表创建及操作

  • 第一部分构建链表,定义结构体,分别用头插法、尾插法实现,这里封装了打印函数:printf();做练习方便后续使用;对链表进行查找,并将查找到的值构建一个新的链表;链表的转置;具体代码如下:
#include<stdio.h>
#include<stdlib.h>
struct node  //定义结构体
{int data;    struct node *next;
};
void print_data(struct node *inc)   //封装函数做打印用
{printf("data = %d\n",inc->data);
}
void traverse(struct node *inc, void(*print)(struct node *))    //遍历链表并打印
{while(inc){print(inc);inc = inc->next;}
}
void insertHead(struct node **inc, int n)       //头插法
{struct node *tmp = malloc(sizeof(struct node));tmp->data = n;tmp->next = *inc;*inc = tmp;
}
void insertTail(struct node **inc, int n)   //尾插法
{struct node *tmp = malloc(sizeof(struct node));tmp->data = n;tmp->next = NULL;while(*inc){inc = &(*inc)->next;}*inc = tmp;
}
struct node *findNode(struct node **inc, int goal)      //链表查找,并把查找到的值,存入新的链表中
{struct node *newlist = NULL;  //新的链表struct node *tmp = *inc;  //中间节点接收传入的值struct node *pre;  //上一个节点struct node *cur;  //当前节点while(tmp->next){if(goal == tmp->next->data){pre = tmp;cur = tmp->next;tmp->next = cur->next;cur->next = newlist;newlist = cur;}else if(goal == tmp->data){*inc = (*inc)->next;tmp->next = newlist;newlist = tmp;tmp = *inc;}else{tmp = tmp->next;}}return newlist;
}
void transNode(struct node **inc)
{struct node *cur = *inc;struct node *pre = NULL;struct ndoe *tmp;while(*inc){tmp = cur->next;cur->next = pre;pre = cur;cur = tmp;}*inc = pre;
}
int main()
{struct node *p = NULL;insertHead(&p,10);insertHead(&p,20);insertHead(&p,10);insertHead(&p,30);insertHead(&p,10);insertHead(&p,40);printf("_____create list_____\n");traverse(p,print_data);printf("_____old list_____\n");struct node *ret = findNode(&p, 10);traverse(p,print_data);printf("_____new list_____\n");traverse(ret,print_data);return 0;
}
  • 执行结果如下:

C语言 链表创建及操作相关推荐

  1. 使用C语言链表创建学生信息并且将信息打印输出

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  2. C语言链表的删除操作

    记录学习的第13天 今天,复习一下链表的删除节点操作 由于之前已经说过动态链表的实现,所以就不再说了: 码来!(剑来!) 1. 先创建结构体并且创建索引指针: struct student{int d ...

  3. C语言链表-创建链表并且从键盘输入赋值

    链表是C语言里面学习比较困难的一部分内容,下面这个例子就演示了创建一个链表并且从输入端赋值,希望对大家有用. #include <stdio.h> #include <stdlib. ...

  4. c语言链表创建递归,递归创建二叉树c语言实现+详细解释

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void CreatBiTree(BiTree T) { char a; scanf("%c",&a); if(a=='@') ...

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

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

  6. C 语言 链表的创建与打印

    C 语言 链表的创建与打印 /* 包含的头文件 */#include <stdio.h>#include <stdlib.h>/* 定义一个表示链表的结构体指针 */struc ...

  7. C语言单链表创建(基础)

    最近在刷题重温C语言的基础知识.关于单链表的创建还有一些不懂,参考了网上的代码,做一下笔记. 1.单链表的创建与赋值 #include <stdio.h> #include <std ...

  8. 数据结构单链表的基础操作(C语言)

    效果如图: 代码及详情如下:(文末总结) 目录 //主函数 //菜单 //创建链表 //插入结点 //删除结点 //查找结点 //链表长度 //打印链表 //清空链表 //逆置链表 //删除偶数元素结 ...

  9. C语言实现创建有序链表

    C语言实现创建有序链表 节点结构 //链表 struct node {int data;node *next; }; 插入函数(有序) //链表中插入节点(保持链表升序关系) node *insert ...

最新文章

  1. AAAI2021 | 图神经网络最新进展解读
  2. OS / Linux / 文件描述符以及 file 结构体
  3. 05-iOS蓝牙开发总结
  4. ElasticSearch搜索引擎:常用的存储mapping配置项 与 doc_values详细介绍
  5. Redis 如何处理已经过期的数据?
  6. jquery ajax 调用webservice以及跨域问题
  7. 小白学测试(基础知识)
  8. docker多个mysql实例_Docker创建运行多个mysql容器的方法示例
  9. mPaas集成项目、新建mPaaS项目
  10. Spring源码下载及构建技巧
  11. 网工必知 | 什么叫一层交换机,二层交换机,三层交换机?
  12. 入职要求提供上家公司的工资银行流水?
  13. 华为云sql工程师评测答题[青铜+白银]
  14. 媒体播控系统、信息发布系统 使用说明
  15. 2021桂林市高考一调成绩查询,2021年广西桂林市高考化学一调试卷.docx
  16. 【机器学习】多项式回归案例五:正则惩罚解决过拟合(Ridge回归和Lasso回归)
  17. Java编程:Java里的协程
  18. 网易我的世界服务器加载无响应,我的世界网易版开始游戏没反应
  19. iphone版 天行skyline_苹果再迎大版本更新、iOS13.4正式版推送!这次iPhone可以当车钥匙...
  20. Java 9 - 说说响应式流

热门文章

  1. 你所未曾了解的大数据:人为力量
  2. 微信云开发云数据库,数组中添加对象,修改数组中对象,删除数组中对象
  3. 移动端(微信)页面 不回弹
  4. 服务器开关电源型号ab和sb,SB21150AB 开关电源的PWM调整电流上升率
  5. php 常驻内存数据,EasyTask: PHP常驻内存定时任务定时器,(PHP resident memory timer, scheduled tasks)...
  6. 微信小程序开发入门(连载)—— 微信公众平台配置
  7. 企业内容管理技术与应用,第 1 章
  8. osgearth_geodetic_graticule--经纬网
  9. 创新设计糕点品牌推广策划书简约PPT模板
  10. 2022-07-14 第九组 韩文清