数据结构(C语言版)学习笔记2-单链表
数据结构(C语言版)学习笔记2-单链表
1.单链表定义
typedef int ElemTypes;
typedef struct node
{ElemTypes data; //数据域struct node *next;//指针域
}Slinks;
2.单链表基本操作
//1.单链表初始化(带头结点)
Slinks *creatslink(int i);
//2.求链长(带头结点)
ElemTypes ListLengths(Slinks*head);
//3.取链表内元素
int GetElems(Slinks*L,int i,ElemTypes*t);
//4插入操作
int InsertLists(Slinks*L,int i,ElemTypes e);
//5.删除操作
int DeleteLists(Slinks*L,int i);
//6.定位操作
int LocateLists(Slinks*L,ElemTypes e);
//7.输出链表
void Lists(Slinks*L);
3.完整程序
完整程序包括三个文件:
mains.c(主程序)
用于测试单链表基本操作
Slink.h
标准库导入,存放类型定义,符号定义等预定义内容及函数声明。
Slink.c
存放单链表基本操作函数主体内容。
①mains.c
//mains.c
#include"Slink.h"void main()
{int j=0;Slinks *L=NULL; //创建一个结构体指针指向单向链表头printf("\n-------程序运行开始!-------\n");L=creatslink(5);Lists(L);printf("\n链表长为:%d\n",ListLengths(L));//3.取链表内元素GetElems(L,3,&j);printf("表内第3个元素为:%d\n",j);InsertLists(L,2,666);printf("\n链表长为:%d\n",ListLengths(L));Lists(L);printf("删除操作%d\n", DeleteLists(L,3));Lists(L);printf("元素666在第%d号元素。\n", LocateLists(L,666));printf("\n-------程序运行结束!-------\n");
}
②Slink.h
//Slink.h
#ifndef _SLINK_H
#define _SLINK_H
#include"stdio.h"
#include"stdlib.h"typedef int ElemTypes;
typedef struct node
{ElemTypes data; //数据域struct node *next;//指针域
}Slinks;/*基本操作声明*/
//1.单链表初始化(带头结点)
Slinks *creatslink(int i);
//2.求链长(带头结点)
ElemTypes ListLengths(Slinks*head);
//3.取链表内元素
int GetElems(Slinks*L,int i,ElemTypes*t);
//4插入操作
int InsertLists(Slinks*L,int i,ElemTypes e);
//5.删除操作
int DeleteLists(Slinks*L,int i);
//6.定位操作
int LocateLists(Slinks*L,ElemTypes e);
//7.输出链表
void Lists(Slinks*L);#endif
③Slink.c
//Slink.c
#include"Slink.h"//1.单链表初始化(带头结点)
Slinks *creatslink(int i)
{Slinks *p,*s,*head;int j=0;p=head=(Slinks*)malloc(sizeof(Slinks));//创建头指针for(j=0;j<i;j++){ s=(Slinks*)malloc(sizeof(Slinks));//创建第j+2个结点存储第j+1个元素printf("请输入第%d个元素:",j+1);scanf("%d",&s->data); //结点数据域赋值p->next=s; //将上一个结点的next指针指向该结点p=s; //将P指针指向该结点}p->next=NULL;//将最后一个结点的next指针置空printf("链表创建成功!head=%o\n",head);return head;
}
//2.求表长(含首元结点)
ElemTypes ListLengths(Slinks*head)
{int i;Slinks*p=head;for(i=0;p!=NULL && p->data;i++)//循环历遍结点个数p=p->next;return i;//含首元结点
}
//3.取链表内元素
int GetElems(Slinks*L,int i,ElemTypes*t)
{int n;Slinks*p=L;if(i<1 || i>ListLengths(L))return 0;//参数i不合理,取元素失败返回0for(n=0;n<i;n++)//循环历遍结点个数p=p->next;*t=p->data; //其值通过指针t返回return 1;
}
//4.插入操作
int InsertLists(Slinks*L,int i,ElemTypes e)
{Slinks*p=L,*t;int n;if(i<1 || i>ListLengths(L))return 0;else{for(n=0;n<i-1;n++)p=p->next;t=p->next;p->next=(Slinks*)malloc(sizeof(Slinks));p=p->next;p->data=e;p->next=t;return 1;}
}
//5.删除操作
int DeleteLists(Slinks*L,int i)
{Slinks*p=L,*t;int n;if(i<1 || i>ListLengths(L))return 0;else{for(n=0;n<i-1;n++)p=p->next;t=p->next;p->next=t->next;free(t);return 1;}
}
//6.定位操作
int LocateLists(Slinks*L,ElemTypes e)
{Slinks*p=L;int n;for(n=0;p->data!=e && p!=NULL;n++)p=p->next;if(p->data == e)//找到,返回位序return n;else //没找到,返回0return 0;
}
//7.输出链表
void Lists(Slinks*L)
{Slinks*p=NULL;p=L;p=p->next; //跳过首元结点printf("链表内元素为:\n");while(p!=NULL && p->data){printf("-%d",p->data);p=p->next;}printf("\n");
}
本次学习笔记如上所示,不足之处欢迎大家批评指正。
数据结构(C语言版)学习笔记2-单链表相关推荐
- 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置
<(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...
- 邓公数据结构C++语言版学习笔记1
1. 对于计算幂2n2^n2n的算法优化 暴力算法时间复杂度O(n)O(n)O(n) __int64 power2BF_I(int n) //幂函数2^n算法(蛮力迭代版),n >= 0{ __ ...
- 邓公数据结构C++语言版学习笔记——二叉树
二叉树的遍历 一. preorder--先序遍历VLR 1. 递归先序遍历 2. 迭代先序遍历 3.先序遍历图解 二. inorder--先序遍历LVR 1. 递归中序遍历 2.迭代中序遍历 3.迭代 ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)
线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...
- 《数据结构》c语言版学习笔记——线性表的顺序存储结构
线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...
- 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)
2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...
- 数据结构(C语言版)严蔚敏(树、二叉树的相关概念笔记)
数据结构(C语言版)严蔚敏(树的相关概念笔记) 1. 树中一个节点的孩子个数称为该节点的度,树中节点的最大度数称为树的度: 2. 度大于0的节点称为[分支节点](非终端节点),度为0的节点称为[叶子节 ...
- 数据结构C语言版(清华大学_唐国民_第3版)单链表
//数据结构C语言版(清华大学_唐国民_第3版) //单链表功能实现,书 P25 例子2.3.3,与书上代码有些许出入,不用在意,重要的是思路 #include<stdio.h> #inc ...
- Go语言开发学习笔记(持续更新中)
Go语言开发学习笔记(持续更新中) 仅供自我学习 更好的文档请选择下方 https://studygolang.com/pkgdoc https://www.topgoer.com/go%E5%9F% ...
最新文章
- 【组队学习】【32期】李宏毅机器学习(含深度学习)
- Python基础05 缩进和选择
- iOS自定义的UISwitch按钮
- mysql事务传播属性_Spring事务传播属性和隔离级别详细介绍
- CodeForces 1191A---Tokitsukaze and Enhancement
- C/C++ putchar函数 - C语言零基础入门教程
- Java类类getGenericSuperclass()方法及示例
- python 保存图片代码_最简单的selenium+Python自动右键保存图片
- 车载wince系统刷界面ui_UI入门秘笈,你想知道吗?
- 结合nginx源码学习error_page和proxy 指令的关系
- PDF加页码怎么设置?这里有你想知道的答案
- 如何给计算机c盘加内存,电脑C盘内存太小_这个方法教你扩大C盘空间 - 驱动管家...
- php制作特效文字,PPT制作文字特效 PPT特效文字制作教程
- 字典(python学习)
- 深度学习7日入门-CV疫情特辑心得
- windows挂载webdav
- OV、DV、EV证书的区别
- 火猴之ppt动画效果实现(firemonkey)
- Makefile中的奇葩字符
- 史上最全的IDEA快捷键总结
热门文章
- XJOI 7970 优秀数
- 家庭自动炒菜机设计(论文+CAD图纸+SolidWorks三维+ppt+驱动控制子程序)
- 赛思信安:实现数据全生命周期管理
- 【华为账号服务】【FAQ】Account Kit常见咨询合集--登录相关问题
- 微信小程序输入框字体颜色设定和输入框中输入字体的设定
- 计算机数字时间格式,时间标记 (计算机)
- 管理格言集锦(收集)
- 修改阿凡提服务器时间,《阿凡提》因超时错失奥斯卡 主办方发证书表示欣赏...
- Android图片缓存管理
- open( ) 函数简介