数据结构(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% ...
最新文章
- less 命令(转)
- 【概率论与数理统计】假设检验
- python实体类dict to object
- antimalware service executable磁盘占用过多
- boost::hana::maybe用法的测试程序
- ngrx里StoreModule.forFeature(‘example‘, reducers)运行时的数据结构
- zabbix2.2入门教程之编译安装(一)
- git reset hard/soft/mixed区别
- C#GDI绘制自定义字体
- box-sizing的类型
- mysql图片保存和读取
- ESP8266 ESP8089 ESP8285 用户手册文档汇总
- 项目管理工具maven的使用
- 英语表达技巧—委婉地表达消极,否定情感
- 查看linux系统有哪些登陆用户,Linux_linux查看系统登录用户,Last login: Wed Jul 29 17:16:10 2009 fro - phpStudy...
- 前端----let关键字、const关键字
- CORDIC算法 arctan反正切计算原理及C语言定点实现
- Shinobi视频监控平台
- 会员测试环境治理之路
- python调包师_为“Python调包侠” 画像