数据结构(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-单链表相关推荐

  1. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  2. 邓公数据结构C++语言版学习笔记1

    1. 对于计算幂2n2^n2n的算法优化 暴力算法时间复杂度O(n)O(n)O(n) __int64 power2BF_I(int n) //幂函数2^n算法(蛮力迭代版),n >= 0{ __ ...

  3. 邓公数据结构C++语言版学习笔记——二叉树

    二叉树的遍历 一. preorder--先序遍历VLR 1. 递归先序遍历 2. 迭代先序遍历 3.先序遍历图解 二. inorder--先序遍历LVR 1. 递归中序遍历 2.迭代中序遍历 3.迭代 ...

  4. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  5. 《数据结构》c语言版学习笔记——其他链表(线性表的链式存储结构Part2)

    线性表的链式存储结构 数据结构系列文章 第三章 循环链表.双向链表 文章目录 线性表的链式存储结构 前言 一.循环链表 (一)定义 (二)尾指针 二.双向链表 (一)定义 (二)代码 总结 前言 提示 ...

  6. 《数据结构》c语言版学习笔记——线性表的顺序存储结构

    线性表的顺序存储结构 第一章 线性表的顺序存储结构 文章目录 线性表的顺序存储结构 前言 一.顺序存储结构的建立 1.条件 2.代码 二.顺序存储结构的获得元素 1.条件 2.代码 三.顺序存储结构的 ...

  7. 数据结构(c语言版)笔记6,2020考研计算机《数据结构(C语言版)》复习笔记(6)

    2020年计算机考研复习已经开始,新东方在线在此整理了2020考研计算机<数据结构(C语言版)>复习笔记(6),希望能帮助大家! 第六章 树知识点整理 树是n个结点的有限集合,非空时必须满 ...

  8. 数据结构(C语言版)严蔚敏(树、二叉树的相关概念笔记)

    数据结构(C语言版)严蔚敏(树的相关概念笔记) 1. 树中一个节点的孩子个数称为该节点的度,树中节点的最大度数称为树的度: 2. 度大于0的节点称为[分支节点](非终端节点),度为0的节点称为[叶子节 ...

  9. 数据结构C语言版(清华大学_唐国民_第3版)单链表

    //数据结构C语言版(清华大学_唐国民_第3版) //单链表功能实现,书 P25 例子2.3.3,与书上代码有些许出入,不用在意,重要的是思路 #include<stdio.h> #inc ...

  10. Go语言开发学习笔记(持续更新中)

    Go语言开发学习笔记(持续更新中) 仅供自我学习 更好的文档请选择下方 https://studygolang.com/pkgdoc https://www.topgoer.com/go%E5%9F% ...

最新文章

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

热门文章

  1. 服务器电源输出电压不稳定,开关电源输出电压不稳定怎么解决?
  2. 联想谋求主动转型,陈旭东的压力与乐观
  3. 如何用AI绘图画出超真实细节感超强的小姐姐?(Lora篇)
  4. Vue 父组件如何触发子组件中的方法
  5. unigine游戏引擎
  6. javascript/js判断输入的内容是否是数值
  7. GIThub的第一次使用的操作说明(个人笔记)
  8. 网络安全宣传小程序计算机毕业设计源码70468
  9. 赛思互动:CRM系统为何能给企业带来销售增长?
  10. Idea使用svn时commit特别慢的问题及解决方法