存档-----------

 1 #include <iostream.h>
 2 typedef char ElemType;
 3 #include "LinkList.h"
 4 void main()
 5 {
 6     LinkList h;
 7     ElemType e;
 8     int i=0;
 9     int t=0;
10     cout<<"(1)初始化单链表h\n";
11     InitList(h);
12     cout<<"(2)单链表为"<<(ListEmpty(h)?"空":"非空")<<endl;
13     cout<<"(3)依次输入字母序列,以'#'结束"<<endl;
14     cin>>e;
15     i=1;
16     while(e!='#')
17     {
18         ListInsert(h,i,e);
19         i++;
20         cin>>e;
21     }
22     cout<<"(4)输出单链表h:";
23     PrintList(h);
24     cout<<"(5)单链表h的长度="<<ListLength(h)<<endl;
25     cout<<"(5)单链表h为"<<(ListEmpty(h)?"空":"非空")<<endl;
26     cout<<"(6)测试GetElem(L,i,e)函数,请输入i的值"<<endl;
27     cin>>i;
28     t=GetElem(h,i,e);
29     if(t)
30         cout<<"(6)单链表h的第"<<i<<"个元素="<<e<<endl;
31     else
32         cout<<"(6)单链表h的第"<<i<<"个元素不存在\n";
33     cout<<"(7)测试LocateElem(L,e)函数,请输入e的值"<<endl;
34     cin>>e;
35     t=LocateElem(h,e);
36     if(t)
37         cout<<"(7)元素"<<e<<"的位置="<<t<<endl;
38     else
39         cout<<"(7)元素"<<e<<"不存在\n";
40     cout<<"(8)测试ListInsert(L,i,e)函数,请输入i的值和e的值"<<endl;
41     cout<<"请输入i的值:";
42     cin>>i;
43     cout<<"请输入e的值:";
44     cin>>e;
45     cout<<"(8)在第"<<i<<"个元素位置上插入"<<e<<"元素:";
46     t=ListInsert(h,i,e);
47     if(t)
48         cout<<"成功!\n";
49     else
50         cout<<"失败!\n";
51     cout<<"(9)输出单链表h:";
52     PrintList(h);
53     cout<<"(10)测试ListDelete(L,i,e)函数,请输入i的值"<<endl;
54     cin>>i;
55     cout<<"(10)删除h的第"<<i<<"个元素:";
56     t=ListDelete(h,i,e);
57     if(t)
58         cout<<"成功!\n";
59     else
60         cout<<"失败!\n";
61     cout<<"(11)输出单链表h:";
62     PrintList(h);
63     cout<<"(12)释放单链表h\n";
64     DestoryList(h);
65 }

  1 typedef struct LNode//定义单链表结点类型
  2 {
  3     ElemType data;
  4     struct LNode *next;
  5 }LNode,*LinkList;
  6 int InitList(LinkList &L)
  7 {
  8     //初始化只含有头结点的空的单链表
  9     L=new LNode;//创建头结点
 10     if(L==NULL)
 11     {
 12         cout<<"结点分配失败\n";
 13         return 0;
 14     }
 15     L->next=NULL;
 16     return 1;
 17 }
 18 void ClearList(LinkList &L)
 19 {
 20     //清空单链表,仅保留头结点
 21     LinkList p;
 22     while(L->next)
 23     {
 24         p=L->next;
 25         L->next=p->next;
 26         delete p;
 27     }
 28 }
 29 int ListLength(LinkList L)
 30 {
 31     //返回单链表的长度
 32     LinkList p=L;
 33     int i=0;
 34     while(p->next!=NULL)//数到最后一个结点为止
 35     {
 36         i++;
 37         p=p->next;
 38     }
 39     return i;
 40 }
 41 void PrintList(LinkList L)
 42 {
 43     //顺序输出单链表中的各元素
 44     LinkList p=L->next;
 45     while(p!=NULL)
 46     {
 47         cout<<p->data<<" ";
 48         p=p->next;
 49     }
 50     cout<<endl;
 51 }
 52 bool ListEmpty(LinkList L)
 53 {
 54     //判断是否为空链表
 55     if(L->next==NULL)
 56         return true;
 57     else
 58         return false;
 59 }
 60 int GetElem(LinkList L,int i,ElemType &e)
 61 {
 62     //用e返回单链表L中第i个元素的值
 63     if(i<1)
 64         return 0;
 65     LinkList p=L->next;
 66     int j=1;
 67     while(j<i&&p!=NULL)
 68     {
 69         p=p->next;
 70         j++;
 71     }
 72     if(p==NULL)//j<i,但p为空指针了,即i超出了[1...n]范围了
 73         return 0;
 74     else
 75     {
 76         e=p->data;
 77         return 1;
 78     }
 79 }
 80 int LocateElem(LinkList L,ElemType e)
 81 {
 82     //返回e元素在单链表L中的位序,若不存在,返回0
 83     LinkList p=L->next;
 84     int n=1;
 85     while(p!=NULL&&p->data!=e)
 86     {
 87         p=p->next;
 88         n++;
 89     }
 90     if(p==NULL)//直到最后也没找到等于元素e的结点
 91         return 0;
 92     else
 93         return n;
 94 }
 95 int ListInsert(LinkList &L,int i,ElemType e)
 96 {
 97     //在单链表L的第i个数据元素之前插入数据元素e
 98     if(i<1)
 99         return 0;
100     int j=0;//在1号位置插入时,i-1号位置是0号位置
101     LinkList p=L,s;
102     while(j<i-1&&p!=NULL)//寻找第i-1个结点
103     {
104         p=p->next;
105         j++;
106     }
107     if(p==NULL)//未找到第i-1个结点,即i超出了[1..n+1]时
108         return 0;
109     else//找到第i-1个结点p
110     {
111         s=new LNode;//创建新结点s
112         if(s==NULL)
113         {
114             cout<<"结点分配失败\n";
115             return 0;
116         }
117         s->data=e;
118         s->next=p->next;//将s插入到p之后
119         p->next=s;
120         return 1;
121     }
122 }
123 int ListDelete(LinkList &L,int i,ElemType &e)
124 {
125     //删除单链表L中第i个结点,并用e返回其值
126     if(i<1)
127         return 0;
128     LinkList p=L,q;
129     int j=0;
130     while(j<i-1&&(p->next)!=NULL)//寻找第i-1个结点,且第i-1号元素不是最后一个元素
131     {
132         p=p->next;
133         j++;
134     }
135     if((p->next)==NULL)//未找到第i-1个结点,即i超出了[1..n]
136         return 0;
137     else//找到第i-1个结点p
138     {
139         q=p->next;//q指向要删除的结点
140         p->next=q->next;//从单链表中删除q结点
141         e=q->data;
142         delete q;//释放q结点
143         return 1;
144     }
145 }
146 void DestoryList(LinkList &L)
147 {
148     //销毁单链表
149     LinkList p;
150     while(L)
151     {
152         p=L;
153         L=L->next;
154         delete p;
155     }
156     L=NULL;
157 }

运行结果如下:

线性表的链式存储结构的实现及其应用(C/C++实现)相关推荐

  1. 数据结构和算法:(3)3.2线性表的链式存储结构

    线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素也就是说你这个可以放在A地点,这个可以放在E地点,A地点和E地点中间可以隔开一个C地点和D地点,这样是允许的),这组存储单元可以存在 ...

  2. 链表list(链式存储结构实现)_5 线性表的链式存储结构

    系列文章参考资料为<大话数据结构>,源码为个人私有,未经允许不得转载 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,可以使连续的,也可以不连续,也就意味这些元素可以 ...

  3. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

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

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

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

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

  6. 数据结构开发(5):线性表的链式存储结构

    0.目录 1.线性表的链式存储结构 2.单链表的具体实现 3.顺序表和单链表的对比分析 4.小结 1.线性表的链式存储结构 顺序存储结构线性表的最大问题是: 插入和删除需要移动大量的元素!如何解决? ...

  7. 线性表(链式存储结构)C语言

    文章目录 一.线性表的链式存储结构 二.代码 1.头文件与宏定义: 2.对链表的定义及主要使用函数: 3.测试函数(主函数): 三.运行结果 一.线性表的链式存储结构 线性表的链式存储结构的特点是用一 ...

  8. Python 数据结构 之 线性表 的链式存储结构

    用Python 来实现 C语言中 线性表的链式存储结构. 文章转载请注明:  Python 数据结构 之 线性表 的链式存储结构 代码地址 https://github.com/WenkeZhou/P ...

  9. 【数据结构】CH2 线性表的链式存储结构

    目录 一.链表概述 1.相关定义 二.单链表 1.插入和删除节点的操作 (1)插入结点 (2)删除结点 2.建立单链表 (1)头插法 (2)尾插法 3.线性表基本运算在单链表中的实现 (1)初始化线性 ...

  10. 线性表的链式存储结构以及单链表的插入和删除原理实现

    线性表的链式存储结构 线性表中的每个元素最多只有一个前驱元素和一个后继元素(其逻辑结构),因此可以采用链式存储结构存储. 链表 线性表的链式存储结构称为链表.在链表中每个结点不仅包含有元素本身的信息( ...

最新文章

  1. 直接可以拿去用的正则验证表达式
  2. SQL Server 执行计划
  3. java成员属性生命周期,Spring注解 - 生命周期、属性赋值、自动装配
  4. osgi框架 android,基于OSGi的Android应用模块动态加载框架设计与实现
  5. html有4个li怎么选择第二个,如何在html中使用两个具有不同属性的Li?
  6. 用户视图切换为Linux视图,视图_ITPUB博客
  7. AsteriskNow 实用总结
  8. POJ 3666 Making the Grade (DP滚动数组)
  9. mybatis mapper xml的学习详解
  10. 关于GomezPeer赚钱的可行性调查
  11. arduino环境下用ESP32连接PS2手柄
  12. WPS中设置一级、二级、三级标题以及正文和目录
  13. 2019计算机世界语言排名,2019程序语言排行_2019 年 8 月编程语言排行榜
  14. 从2019年报看苏宁易购的全品类+全场景零售融合变革
  15. 【概率论与数理统计 宋浩】P2(1) 互不相容事件 对立事件
  16. (OK) 编译 cm-13-kiwi for (华为 荣耀 5X) - 成功
  17. I/O复用 —— select
  18. 今日学习在线编程题:竹鼠的白色季节
  19. 【大数据处理技术】实验11
  20. html5 i标签什么意思,快速了解HTML5 b和i标签

热门文章

  1. linux创建删除用户和用户组
  2. mvc4开篇之BundleConfig(1)
  3. 激情转型 三大战役重塑AMD
  4. shell脚本积累(不断更新)
  5. 软中断SOFTIRQ
  6. keepalived+LVS 详解(3) -- VRRP协议简介
  7. netlink 0010 -- Generic Netlink 实现通信
  8. fork,你拿什么证明你的写时拷贝(COW)
  9. 在写csdn博客时,如何实现用超链接进行页面内跳转?
  10. scala 入门初探