线性表可以采用顺序存储结构(依赖于数组)和链式存储结构(依赖于指针)

下面是单向链表有着八大基本操作(简称八大基操)

SLinkNode.cpp:

#include <stdlib.h>
#include <stdio.h>typedef int ElemType;
typedef struct node {ElemType data;      //数据域struct node *next;  //指针域
} SLinkNode;     //单节点类型声明// 1.初始化链表
void InitList(SLinkNode *&L) {      //L为引用类型L = (SLinkNode *) malloc(sizeof(SLinkNode));    //创建头结点L->next = NULL;     //头结点next置为空代表空链表
}//2.销毁链表运算
void DestroyLInk(SLinkNode *&L) {SLinkNode *pre = L, *p = pre->next;     //一个负责释放内存一个负责扫描while (p != NULL) {     //当扫描到尾结点时结束扫描free(pre);    //释放当前所指空间pre = p;            //移向下一个节点p = p->next;        //扫描下下一个节点}
}//3.求链表长度
int GetLength(SLinkNode *L) {int i = 0;SLinkNode *p = L->next;while (p != NULL) {i++;p = p->next;}return i;
}//4.求链表中第i个元素的值
int GetElem(SLinkNode *&L, int i, ElemType &e) {        //返回值用来判断是否查找成功,e用来接收查找到的数据int j = 0;SLinkNode *p = L;if (i < 1)return 0;     //如果逻辑序号异常则查找失败while (p != NULL && j < i) {    //直到查找到尾结点且实际节点数小于所查找的位置数j++;p = p->next;        //移动指针查找下一个结点}if (p == NULL) {  //如果遍历链表都没找到则查找失败return 0;} else {      //否则一定找到了e = p->data;    //将找到的节点数据存起来return 1;}
}//5.按值查找
int Locate(SLinkNode *L, ElemType e) {SLinkNode *p = L->next;int j = 1;  //逻辑序号初值while (p != NULL && p->data != e) { //如果没遍历玩链表且没有找到对应结点的数据j++;        //逻辑序号加一p = p->next;        //移向下一个结点}if (p == NULL) {  //如果遍历链表都没找到return 0;   //则返回查找失败} else {  //否则一定找到了return j;   //返回对应结点了逻辑序号}
}//6.插入新结点
int InsElem(SLinkNode *&L, ElemType x, int i) {    //接收要插入元素的链表以及插入位置和插入的数据int j = 0;SLinkNode *p = L, *s;if (i < 1) {    //如果插入位置逻辑序号不对则插入失败return 0;}while (p != NULL && j < i - 1) {  //遍历链表直到找到最后一个结点且结点位置在要求的插入位置以内j++;    //记录插入位置p = p->next;    //移向下一个结点}if (p == NULL) {    //如果遍历了数组都没找到return 0;   //则插入失败} else {  //否则一定可以插入s = (SLinkNode *) malloc(sizeof(SLinkNode));   //开辟新的结点s->data = x;  //给新结点数据域赋值s->next = p->next;  //让新结点指针域等于前驱结点的指针域p->next = s;    //让插入结点的前驱结点指针域指向新节点return 1;}
}
//7.删除结点
int DelElem(SLinkNode *&L,int i){int j = 0;      //记录当前结点位置SLinkNode *p = L,*q;if(i<1){    //若删除的位置不对则删除失败return 0;}while(p!=NULL&&j<i-1){  //遍历链表且链表真实长度小于要删除的结点的前一个位置j++;    //记录已经查找的节点个数p = p->next;    //移向下一个结点}if(p == NULL){  //如果遍历链表都没找到则删除失败return 0;}else{  //否则一定找到该节点的前一个结点q = p->next;    //记录被删除结点的指针域if(q==NULL){    //如果指针域为空则被删除结点不存在return 0;   //删除失败}else{  //否则一定存在被删除结点p ->next = q->next;    //把被删除结点的上一个节点的之指针域赋值为被删除结点的指针域free(q);    //释放被删除结点的内存空间return 1;   //删除成功}}
}
//8.输出链表元素
void DispList(SLinkNode *L){SLinkNode *p = L->next;while(p!=NULL){printf("%d ",p->data);p = p->next;}
}

main.cpp:

#include <stdio.h>
#include "SLinkNode.cpp"    //包括前面的单链表基本运算函数int main() {int i;ElemType e;SLinkNode *L;InitList(L);InsElem(L, 1, 1);InsElem(L, 3, 2);InsElem(L, 1, 3);InsElem(L, 5, 4);InsElem(L, 4, 5);InsElem(L, 2, 6);printf("线性表:");DispList(L);printf("\n长度:%d\n", GetLength(L));i = 3;GetElem(L, i, e);printf("第%d个元素:%d\n", i, e);e = 1;printf("元素%d是第%d个元素\n", e, Locate(L, e));i = 4;printf("删除第%d个元素\n",i);DelElem(L,i);printf("线性表:");DispList(L);
}

测试:

【数据结构】线性表之单向链表的八大基操相关推荐

  1. 数据结构-线性表之单链表

    文章目录 一:相关概念 (1)什么是链表 (2)链表的优点和缺点 (3)链表的分类 二:实践 (1)准备工作 (2)结构体定义 (3)操作 A:创造头结点(初始化) ①:头结点?头指针? ②:初始化 ...

  2. 考研数据结构——(线性表_双链表)

    双向链表 结构体定义 1. 尾插法初始化双向链表 2. 向后遍历双链表 3. 向前遍历双链表 4. 获取指定位序结点 5. 指定结点后插入结点(目前无法加在第一个位置) 6. 删除指定元素后的元素 ( ...

  3. [数据结构](线性表之单链表)

    文章目录

  4. 数据结构-线性表之带头结点的双向循环链表

    文章目录 前言 实现 (1)结构定义 (2)基本函数 (3)操作实现 测试 代码 前言 链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向 ...

  5. 线性表11|单链表小结:腾讯面试题 - 数据结构和算法16

    线性表11|单链表小结:腾讯面试题 让编程改变世界 Change the world by program 静态链表的删除操作 我们的故事还没结束,小C看到小A和2B这样非法的勾当,内心觉得很不爽,一 ...

  6. java实现线性表的案例_数据结构—线性表(LinearList)的原理以及Java实现案例

    线性表:零个或多个数据元素的有限序列.包括数组.链表.栈空间.队列等结构都属于线性表. 本文将介绍Java线性表中的数组.链表的实现逻辑,并附有数组线性表.单链表.静态链表的Java实现源码. 数据结 ...

  7. 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)

    [简述]数据结构-线性表(c语言实现)second60 20180422 1. 线性表的定义 线性表是具有相同特性的数据元素的一个有限序列. 2. 线性表抽象数据类型描述 ADT  List { 数据 ...

  8. 数据结构—线性表(第三章)—基本知识点总结

    目录 1. 线性表的定义 2. 线性表的抽象数据类型 3.线性表的顺序存储结构 3.1 顺序存储定义 3.2 顺序存储方式 3.3 数据长度与线性表长度区别 3.4 地址计算方法 4. 顺序存储结构的 ...

  9. 数据结构——线性表(三)

    数据结构--线性表(三) 作者:黑衣侠客 一.线性表的定义 线性表,从名字来看,可以发现,是具有像线一样性质的表 线性表:零个或多个数据元素的有限序列. 首先,它是一个序列,也就是说,元素之间是有顺序 ...

最新文章

  1. 利用Jenkins的Pipeline实现集群自动化部署SpringBoot项目
  2. [erlang] gen_tcp传输文件原型
  3. 10.23 相对,绝对路径,cd,mkdir/rmdir,rm命令
  4. ZOJ - 3228 Searching the String(AC自动机求不重复子串出现次数)
  5. SAP Spartacus BrowserPlatformLocation的初始化逻辑
  6. SAP CRM产品主数据工作流相关调试
  7. mysql5.6修改默认目录_MySQL修改默认存储路径
  8. Apache Shiro第1部分–基础
  9. 第5节 三个败家子(5)——刘封,被封印的秘密
  10. LeetCode 294. 翻转游戏 II(记忆化递归)
  11. 手机站的view.php,织梦网站文章内容页动态地址plus/view.php路径修改
  12. 信息学奥赛一本通 1054:三角形判断 | OpenJudge NOI 1.4 16
  13. 初次接触 Lottie
  14. 跳转定义_HTML中的超级链接和锚点跳转
  15. android如何去掉自动更新,如何停止Android手机上的应用程序自动更新
  16. 动态修改类注解(赋值)
  17. LiveReload for mac 软件下载
  18. 手势密码解锁微信小程序项目源码
  19. 电脑网页如何截取全图(长图)
  20. 【MindSpore易点通】一站式指南

热门文章

  1. 将硬盘转换成GPT分区格式
  2. 给你的手机加上安全保障,请设置SIM卡PIN码
  3. 神经网络实现猫的种类识别
  4. 数据挖掘思维和实战20 Apriori 与 FP-Growth:不得不再说一遍啤酒与尿布的故事
  5. oracle rac evict,OEL6.3上 Oracle RAC 上节点驱逐检查过程
  6. 如何用电脑玩石器时代M 石器时代M手游PC电脑版教程
  7. 聚播群控微信二次开发sdk完整API
  8. 聊一哈,新入如何优雅的跟老板打招呼
  9. 5.node.js中的事件循环
  10. 作用python需要语言编写小游戏_作的解释|作的意思|汉典“作”字的基本解释