学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
***************************************************
更多精彩,欢迎进入:http://shop115376623.taobao.com
***************************************************
链表是最简单的一种数据结构,是每个软件开发者必须掌握的,也是企业招聘时最常考的内容,因此,在这里总结一下单链表的一些基本操作。
注:这里是单向无环链表,头结点中存放了数据,换句话说就是头结点和其他结点没什么区别,你也可以说成不带头结点的链表。下面就是链表操作的源代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Lnode;
void printList(Lnode *head);
Lnode *createList();
Lnode *insertList(Lnode *head,int elem,int position);
Lnode *deleteElem(Lnode *head,int elem);
Lnode *reverseList(Lnode *head);
int main()
{
Lnode *head;
int elem,position;
head = createList();
printList(head);
printf("Input the element and the position:/n");
scanf("%d %d", &elem, &position);
head = insertList(head,elem,position);
printList(head);
head = reverseList(head);
printf("After reversed:/n");
printList(head);
printf("Input the element you want to delete:/n");
scanf("%d",&elem);
head = deleteElem(head, elem);
printList(head);
return 0;
}
/*传入表头指针,打印链表*/
void printList(Lnode *head)
{
Lnode *p = head;
if (p == NULL)
{
printf("List is empty!/n");
return;
}
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("/n");
}
/*创建一个新链表,返回表头指针*/
Lnode *createList()
{
Lnode *head, *current, *p;
int data;
head = (Lnode *)malloc(sizeof(Lnode));
p = head;
printf("Input integers,0 to break:/n");
scanf("%d",&data);
if (data != -1)
{
p->data = data;
}
else
{
head->next = NULL; //只有头结点的情况
return head;
}
while (1)
{
scanf("%d", &data);
if (data == -1)
{
break;
}
current = (Lnode *)malloc(sizeof(Lnode));
current->data = data;
p->next = current;
p = p->next;
}
p->next = NULL;
return head;
}
/*链表的插入操作,head为链表表头,elem为要插入的元素,position为插入的位置
*将elem插入至第position个结点后,position<=0时,插入至头结点后
*/
Lnode *insertList(Lnode *head,int elem,int position)
{
Lnode *current, *p;
int i = position - 1;
current = head;
/*找到第position个节点*/
while (i > 0 && current->next != NULL)
{
current = current->next;
i--;
}
if (i > 0) //结点数小于输入的位置position
{
printf("Position is wrong!/n");
return head;
}
p = (Lnode *)malloc(sizeof(Lnode));
p->data = elem;
p->next = current->next;
current->next = p;
return head;
}
/*删除链表head中所有的元素elem,返回头结点head*/
Lnode *deleteElem(Lnode *head,int elem)
{
Lnode *p = head;
Lnode *ptemp;
int flag = 0; //记录便表中elem的个数
while (1)
{
if (head->data == elem) //删除头结点的情况
{
flag++;
head = head->next;
free(p);
p = head;
}
else
{
break;
}
}
while (p->next != NULL)
{
if (p->next->data == elem )
{
flag++;
ptemp = p->next;
if (p->next->next != NULL)
{
p->next = p->next->next;
free(ptemp);
ptemp = NULL;
}
else //最后一个结点
{
free(ptemp);
ptemp =NULL;
p->next = NULL;
break;
}
}
else //没有删除结点时,查询下一个结点
{
p = p->next;
}
}
printf("%d number '%d' was found and deleted./n", flag, elem);
return head;
}
/*将链表逆序,该链表不带头结点。*/
Lnode *reverseList(Lnode *head)
{
Lnode *current, *pnext, *ptemp;
current = head;
pnext = head->next;
head->next =NULL;
while (pnext != NULL)
{
ptemp = pnext->next;
pnext->next = current;
current = pnext;
pnext = ptemp;
}
head = current;
return head;
}
学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表相关推荐
- 常见算法:C语言中链表的操作(创建,插入,删除,输出)
链表中最简单的一种是单向链表,它包含两个域,一个信息域和一个指针域.这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值. 一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接 一 ...
- MySQL 学习笔记(18)— 索引的分类、创建、查看、删除等
1. 索引类型 1.1 唯一索引与非唯一索引 唯一索引( UNIQUE )中的索引值必须唯一,可以确保被索引的数据不会重复,从而实现数据的唯一性约束. 非唯一索引允许被索引的字段存在重复值,仅仅用于提 ...
- nltk和python的关系_NLTK学习笔记(一):语言处理和Python
目录 nltk资料下载 import nltk nltk.download() 其中,download() 参数默认是all,可以在脚本里面加上nltk.download(需要的资料库) 来进行下载 ...
- 在php中表单传值怎么用,PHP学习笔记 01 之表单传值
一.HTML传值/PHP接收方法 1.GET(地址栏+问号+数据信息) (1)方式一:表单Form: method = 'get' GET接收数据方式: $_GET['表单元素name对应的值] (2 ...
- 机器视觉学习笔记(4)——单目摄像机标定参数说明
机器视觉学习笔记(4)--单目摄像机标定参数说明 标签: 机器视觉 1.针孔摄像机模型 在介绍摄像机标定参数之前,需要先简单说一下针孔摄像机的原理.投影平面到小孔的距离为焦距f,物体到小孔的距离为Z, ...
- HTML/CSS学习笔记02【表单标签】
w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...
- C语言学习笔记---001C语言的介绍,编译过程原理,工具等
C语言学习笔记---001C语言的介绍,编译过程原理,工具等 创梦技术交流平台:资源下载,技术交流,网络赚钱: 交流qq群:1群:248318056 2群:251572072 技术交流平台:cre.i ...
- IOS学习笔记07---C语言函数-scanf函数
2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072 ...
- IOS学习笔记07---C语言函数-printf函数
IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...
最新文章
- 刻意练习:LeetCode实战 -- Task17. 最长回文子串
- MySQL like 通配符是_MySql模糊查询like通配符使用详细介绍
- 油管螺纹尺寸对照表_数控加工过程中,如何区分新旧螺纹牌号?
- Flask实战2问答平台-父模板抽离(登录注册界面)
- kafka 支持发布订阅
- Oracle查看并修改最大连接数
- @property 参数问题
- 基于麻雀算法优化的相关向量机RVM分类算法
- nodejs脚本后台运行
- Webstorm全版本汉化包
- 最新添加了一键加入服务器的功能,功能介绍 - 晴天漫画系统 晴天漫画程序 基于标签的一套自动采集更新漫画系统...
- 把“友商”装进芯里威联通运行黑群晖最新DSM系统
- C# 添加Excel水印
- 用cisco服务器添加html,在接入服务器上配置基本 AAA
- javase学习——面向对象(下)
- Oracle中joint,Nape中的LineJoint-线段关节
- 【Linux】查看linux是centos还是ubuntu的方法
- Redis主从连接失败 connected_slaves:0
- 关于matches()的使用
- 杨振宁六大数理工作赏析 | 祝贺杨先生百岁华诞
热门文章
- Windows下多个JDK版本的切换方法
- PHP超全局变量$_SERVER
- C#曲线分析平台的制作(四,highcharts+ajax加载后台数据)
- Struts2的工作原理及工作流程
- Elasticsearch的前后台运行与停止(tar包方式)
- 【随记】SQL Server连接字符串参数说明
- org-mode入门教程
- [raywenderlich教程]
- Prepare for Mac App Store Submission--为提交到Mac 应用商店做准备
- set_error_handler自定义错误处理