1、链式存储的操作


LinkList InitList(LinkList &L);
LinkList List_HeadInsert(LinkList &L, int n);
LinkList List_TailInsert(LinkList &L, int n);
void PrintList(LinkList L);
bool Empty(LinkList L);
ElemType GetElem(LinkList L, int i);
Status LocateElem(LinkList L, int e);
bool ListInsert(LinkList &L, int i, int e);
bool ListDelete(LinkList &L, int i, int &e);
void DestoryList(LinkList &L);
Status GetLength(LinkList L);

数据结构

typedef struct LNode{ElemType data;struct LNode* next;
}*LinkList;

2、函数实现

2.1 链表初始化

//初始化链表
LinkList InitList(LinkList &L){L = new LNode;L->next = NULL;
}

2.2 头插法

//头插法
LinkList List_HeadInsert(LinkList &L, int n){LinkList r = L->next;for (int i = 1; i < n; i++){LinkList p = InitList(p);p->data = i*2;L->next = p;p->next = r;r = p;}return L;
}

2.3 尾插法

//尾插法
LinkList List_TailInsert(LinkList &L, int n){LinkList r = L;for (int i = 1; i < n; i++){LinkList p = InitList(p);p->data = i*2;r->next = p;r = p;}return L;
}

2.4 打印链表

//打印单链表
void PrintList(LinkList L){LinkList t = L->next;while(t){cout << t->data << " ";t = t->next;}cout << endl;
}

2.5 判断为空

//判断但链表是否为空
bool Empty(LinkList L){return L==NULL;
}

2.6 求第i个元素

//获取第i个位置上的数据
ElemType GetElem(LinkList L, int i){LinkList t = L;while (i--){t = t->next;}return t->data;
}

2.7 获取数据e的索引

//获取e在第几位
Status LocateElem(LinkList L, int e){LinkList t = L;int i = 0;while(t){if (t->data == e){return i;}i++;t = t->next;}return -1;
}

2.8 在第i个位置插入数据e

//在第i位置插入e
bool ListInsert(LinkList &L, int i, int e){//插入后面LinkList p = L;while(i--){p = p->next;}/*//插入前面LinkList p = L;while(--i){p = p->next;}*/LinkList t = InitList(t);t->data = e;t->next = p->next;p->next = t;return true;
}

2.9 删除第i个位置上的数据

//删除第i个位置数据
bool ListDelete(LinkList &L, int i, int &e){LinkList p = L;while(--i){p = p->next;}LinkList t = p->next;e = t->data;p->next = p->next->next;delete(t);return true;
}

2.11 获取长度

Status GetLength(LinkList L){int len = 0;LinkList t = L;while(t){len++;t = t->next;}return len;
}

2.11 销毁链表

//销毁链表
void DestoryList(LinkList &L){LinkList p;while(L){p = L;L = L->next;delete p;}if(L == nullptr){cout << "successfully" << endl;}else{cout << "fail" << endl;}
}

3、 完整代码

#include<iostream>
using namespace std;typedef int ElemType;
typedef int Status;typedef struct LNode{ElemType data;struct LNode* next;
}*LinkList;LinkList InitList(LinkList &L);
LinkList List_HeadInsert(LinkList &L, int n);
LinkList List_TailInsert(LinkList &L, int n);
void PrintList(LinkList L);
bool Empty(LinkList L);
ElemType GetElem(LinkList L, int i);
Status LocateElem(LinkList L, int e);
bool ListInsert(LinkList &L, int i, int e);
bool ListDelete(LinkList &L, int i, int &e);
void DestoryList(LinkList &L);
Status GetLength(LinkList L);
int main(){LinkList L = InitList(L);//初始化链表cout << "Initiate List successfully" << endl;//头插法//L = List_HeadInsert(L,8);//PrintList(L);//尾插法L = List_TailInsert(L,8);PrintList(L);cout << "I want to know whether L is NULL" << endl;if(Empty(L)){cout << "L is empty";}else{cout << "L is not empty";}cout << "I want to get the third number" << endl;cout << "The third number is :" <<GetElem(L,3) << endl;cout << "I want know where is 8" << endl;cout << "Location of 8 is :" << LocateElem(L,8) << endl;cout << "Inert 9 in index 4" << endl;if (ListInsert(L,4,9)){PrintList(L);}cout << "Delete index 6 " << endl;int e;if (ListDelete(L,6,e)){PrintList(L);cout << "e:" << e << endl;}cout << "Get len of L" << endl;cout << GetLength(L) << endl;cout << "Finally, I will destory L" << endl;DestoryList(L);return 0;
}//初始化链表
LinkList InitList(LinkList &L){L = new LNode;L->next = NULL;
}//头插法
LinkList List_HeadInsert(LinkList &L, int n){LinkList r = L->next;for (int i = 1; i < n; i++){LinkList p = InitList(p);p->data = i*2;L->next = p;p->next = r;r = p;}return L;
}//尾插法
LinkList List_TailInsert(LinkList &L, int n){LinkList r = L;for (int i = 1; i < n; i++){LinkList p = InitList(p);p->data = i*2;r->next = p;r = p;}return L;
}//打印单链表
void PrintList(LinkList L){LinkList t = L->next;while(t){cout << t->data << " ";t = t->next;}cout << endl;
}//判断但链表是否为空
bool Empty(LinkList L){return L==NULL;
}//获取第i个位置上的数据
ElemType GetElem(LinkList L, int i){LinkList t = L;while (i--){t = t->next;}return t->data;
}//获取e在第几位
Status LocateElem(LinkList L, int e){LinkList t = L;int i = 0;while(t){if (t->data == e){return i;}i++;t = t->next;}return -1;
}//在第i位置插入e
bool ListInsert(LinkList &L, int i, int e){//插入后面LinkList p = L;while(i--){p = p->next;}/*//插入前面LinkList p = L;while(--i){p = p->next;}*/LinkList t = InitList(t);t->data = e;t->next = p->next;p->next = t;return true;
}//删除第i个位置数据
bool ListDelete(LinkList &L, int i, int &e){LinkList p = L;while(--i){p = p->next;}LinkList t = p->next;e = t->data;p->next = p->next->next;delete(t);return true;
}//销毁链表
void DestoryList(LinkList &L){LinkList p;while(L){p = L;L = L->next;delete p;}if(L == nullptr){cout << "successfully" << endl;}else{cout << "fail" << endl;}
}Status GetLength(LinkList L){int len = 0;LinkList t = L;while(t){len++;t = t->next;}return len;
}

(3)数据结构-线性表链式存储相关推荐

  1. 数据结构--线性表链式存储

    系列文章目录 第二话 数据结构之线性表 文章目录 一.线性表的基本操作步骤 1.存储结构 2.基本操作 3.实现运用 二.线性表的插入 三.线性表的删除 四.总结 前言 为了克服顺序表的缺点,可以采用 ...

  2. 数据结构——线性表链式存储结构

    目录 1.链式存储结构定义 2.单链表 3.头指针与头结点 4.单链表存储结构 5.单链表的读取 6.单链表的插入 7.单链表的删除 1.链式存储结构定义 线性表的链式存储结构是用一组任意的存储单元存 ...

  3. 数据结构--线性表链式存储(链表)--单链表

    定义: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. 链表中的数据是以节点来表示的,每个结点的构成:元素( 数据元素的映象) + 指针(指示后继元素存储位置),元素 ...

  4. 数据结构(一)线性表链式存储实现

    (一)前提 在前面的线性表顺序存储结构,最大的缺点是插入和删除需要移动大量的元素,需要耗费较多的时间.原因:在相邻两个元素的存储位置也具有邻居关系,他们在内存中的位置是紧挨着的,中间没有间隙,当然无法 ...

  5. 《大话数据结构》----第三章---线性表链式存储结构

    目录 一.为啥要单独说线性表的链式存储结构? 二.这些链式存储结构分别是什么样的? 2.1 单链结构是怎么样的? 2.2 静态链表又是怎么定义的呢? 2.3循环链表是如何定义的? 2.4双向链表是为什 ...

  6. python 单链表节点怎么快速定义_线性表链式存储结构之单链表

    线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置.比起顺序存储结构每个元素只需要存储一个位置就可以了.现在链式存储结构中,除了要存储数 ...

  7. Linux从入门到精通系列之线性表链式存储结构-单链表原理解析

    前言 线性表的链式存储结构的特点就是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以在内存中未被占用的任意位置. 比起顺序存储结构每个元素只需要存储一个位置就可以了.现在链式存储结构中,除了 ...

  8. 大话数据结构02 :线性表链式存储 C++

    1.链表插入和删除等操作 关键是要找到插入元素的前一个元素 Status ListInsert(LinkList L, int i, ElemType e) {LinkList N = new Nod ...

  9. [一] 详细讲解: 线性表链式存储结构 中的 单链表; (数据结构和算法)

    一.定义 二.单链表

  10. 数据结构C语言实现系列——线性表(线性表链接存储(单链表))

    #include <stdio.h> #include <stdlib.h> #define NN 12 #define MM 20 typedef int elemType ...

最新文章

  1. python软件怎么用-python软件怎么用
  2. C#sql语句如何使用占位符
  3. [Leetcode][第657题][JAVA][机器人能否返回原点][数组][HashMap]
  4. bat 存储过程返回值_MySQL-存储过程和函数详述
  5. php 禁止ajax 重复请求,js ajax请求防止重复提交
  6. python入门代码大全-python入门代码指南教程书籍推荐2020总结全集汇总
  7. angular 倒计时
  8. python多重继承super父类参数_Python super()函数使用及多重继承
  9. 2022年最完整的html网页跳转代码大全
  10. 大学生期末考试Java复习题
  11. 使用Python写一个简单的服务器
  12. windows 豆沙绿参数
  13. Android jetpack DataBinding 与RecyclerView
  14. jsp医疗报销管理系统 myeclipse开发技术 mysql数据库
  15. Bootstrap3【上手教程】
  16. 高德3D动态地图—旋转视角
  17. 亲测这款读书笔记app软件能提高你的阅读兴趣
  18. MATLAB中强行终止执行程序的4种方法
  19. python上手_10分钟上手python pandas
  20. 超零协议(SERO)轻松入门——基于CENTOS7

热门文章

  1. 6.gloox 之 MessageHandler
  2. 企业级WLAN市场格局
  3. windowsC盘msp文件清理
  4. 比 matplotlib 效率高十倍的数据可视化神器
  5. scala下使用akka计算圆周率pi
  6. Lesson 04:类和对象,类的成员变量、成员方法、构造方法
  7. VC Ping IP的类
  8. 【linux】gcc命令
  9. PHP Smarty增删改查(考试题库)
  10. ArcEngine C# 二次开发 PolyLine 多次打断操作