单链表的学习
时间:2020-05-12
本文章向大家介绍单链表的学习,主要包括单链表的学习使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
定义:
一、初始化
void InitList(SLink *&L) /*L作为引用型参数*/
{
L=(SLink *)malloc(sizeof(SLink)); /*创建头结点*L*/
L->next=NULL;
}
二、链表长度:
int GetLength(SLink *L) /*求线性表的长度*/
{
int i=0;
SLink *p=L->next;
while (p!=NULL)
{
i++;
p=p->next;
}
return i;
}
三、求第 i 个元素:
int GetElem(SLink *L,int i,ElemType &e) /*求线性表中第i个元素*/
{
int j=1;
SLink *p=L->next;
if (i<1 || i>GetLength(L))
return(0); /*i参数不正确,返回0*/
while (j<i) /*从第1个结点开始找,查找第i个结点*/
{
p=p->next;j++;
}
e=p->data;
return(1); /*返回1*/
}
四、按值查找:
int Locate(SLink *L,ElemType x) /*按值查找*/
{
int i=1;
SLink *p=L->next;
while (p!=NULL && p->data!=x) /*从第1个结点开始查找data域为x的结点*/
{
p=p->next;
i++;
}
if (p==NULL)
return(0);
else
return(i);
}
五、插入结点:
int InsElem(SLink *L,ElemType x,int i) /*插入结点*/
{
int j=1;
SLink *p=L,*s;
s=(SLink *)malloc(sizeof(SLink)); /*创建data域为x的结点*/
s->data=x;s->next=NULL;
if (i<1 || i>GetLength(L)+1)
return 0; /*i参数不正确,插入失败,返回0*/
while (j<i) /*从头结点开始找,查找第i-1个结点,由p指向它*/
{
p=p->next;j++;
}
s->next=p->next; /*将*s的next域指向*p的下一个结点(即第i个结点)*/
p->next=s; /*将*p的next域指向*s,这样*s变成第i个结点*/
return 1; /*插入运算成功,返回1*/
}
六、删除结点:
int DelElem(SLink *L,int i) /*删除结点*/
{
int j=1;
SLink *p=L,*q;
if (i<1 || i>GetLength(L))
return 0; /*i参数不正确,插入失败,返回0*/
while (j<i) /*从头结点开始,查找第i-1个结点,由p指向它*/
{
p=p->next;j++;
}
q=p->next; /*由q指向第i个结点*/
p->next=q->next; /*将*p的next指向*q之后结点,即从链表中删除第i个结点*/
free(q); /*释放第i个结点占用的空间*/
return 1; /*删除运算成功,返回1*/
}
七、输出单链表:
void DispList(SLink *L) /*输出单链表*/
{
SLink *p=L->next;
while (p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
Main:
int main()
{
int i;
ElemType e;
SLink *L;
InitList(L); /*初始化单链表L*/
InsElem(L,'a',1); /*插入元素*/
InsElem(L,'c',2);
InsElem(L,'a',3);
InsElem(L,'e',4);
InsElem(L,'d',5);
InsElem(L,'b',6);
printf("线性表:");DispList(L);
printf("长度:%d\n",GetLength(L));
i=3;GetElem(L,i,e);
printf("第%d个元素:%c\n",i,e);
e='a';
printf("元素%c是第%d个元素\n",e,Locate(L,e));
i=4;printf("删除第%d个元素\n",i);
DelElem(L,i);
printf("线性表:");DispList(L);
return 0;
}
原文地址:https://www.cnblogs.com/Noturns/p/12875717.html
- 漏洞科普:你对弱口令重视吗?
- 自定义View简单使用
- 正确姿势:如何调戏蹭网者
- 当我们讨论流畅度的时候,我们究竟在说什么?
- ImageButton和ZoomButton使用大全
- Android 插件化突破应用市场无法上广告的问题
- ImageView的属性和方法大全
- sharedpreferences如何保存对象
- Android:全面解析熟悉而陌生 的 Application 类使用
- ToggleButton和Switch使用大全
- Android 无需权限显示悬浮窗, 兼谈逆向分析 App
- android数据保存之greendao
- CheckBox和RadioButton使用大全
- 关于 Android 实现滑动返回的几种方法总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux工作目录切换命令
- Linux常用工作命令
- C语言之二级指针
- 七夕如何向心爱的ta表白,看这里
- 七夕面向对象编程,你知道Java有哪些创建对象的方式吗?
- 微信小程序结合腾讯地图获取用户所在城市信息
- 设置事务超时时间的问题及Oracle数据库update和锁
- 超赞,压缩20M文件从30秒到1秒的优化过程
- 超赞,给你推荐20个使用 Java CompletableFuture的例子!
- Java入门编程练习题
- Spark UDF加载外部资源
- Flink SQL FileSystem Connector 分区提交与自定义小文件合并策略
- Facebook面试题: 用递归和迭代手写Array.prototype.flat()
- Kubernetes插件之ip-masq-agent
- 抽丝剥茧Kotlin - 协程