什么是线性表表的应用举例(C++)

利用c++实现线性表的顺序存储
#include&iostream&
int const maxsize = 100; // 线性表的最大可容纳量
class sequentlist{&&
//建立线性表的类
&int a[100];
& //线性表的实际长度
//获取线性表中的元素
&void Get(sequentlist L)
&&for (int i = 0; i
&= L.len - 1; i++)
&& "线性表第"
i+1&&"的元素是";
//输出线性表的元素
&void Getout(sequentlist L)
&& "L = {" ;
&for (int i = 0; i &= L.len-1;
&cout && "}";
//查找元素x在线性表中的位置
&void Locate( sequentlist L,int x)
&int temp = -1;
&for(int i = 0;i &=
L.i++)& //如果x在顺序表中就将序号记录在temp中
&if(a[i] == x)& {temp =
"的位置是" && temp
&if(temp == -1) cout
&&"元素不在表中"
&& //如果元素不存在就输出错误
//将元素x插入到第i个位置
void Insert( sequentlist & L,int x,int i)
&if (L.len &=
100)& //判断插入是否合法
&& "顺序表已满!"
&else if((i & 1) || (i
& L.len + 1))
&& "插入的位置不合理!"
&&for(int j = L. j
&= j--)& //将i位置之后的元素后移一位
&&&L.a[j+1] =
&&&L.a[i] =
x;& //将x插入到i位置
&&&L.len++;
//删除元素
void sequentlist::Delete(sequentlist &L,int
&if((i&0) || (i &=
L.len + 1))& cout &&
"删除位置不合法!";&
&& "删除第"
"个位置元素" &&
&&for(int j =j
& L.len - 1; j++)&
//将i位置之后的元素都前移一位
&&L.len--;
//求交集操作
void Intersection(sequentlist &LA,sequentlist
&LB,sequentlist &LC)
&int temp = 0;
&LC.len = 0;
&//将a中的元素赋给c中
&for(int i = 0; i & LA.
&&LC.a[i] = LA.a[i];
&&LC.len =
&//将b中的元素依次与c中的元素比较
&for(int j = 0; j &
&&for(int i = 0; i
&&&if(LC.a[i] ==
&&&&temp++;
&&if(temp == 0)
//如果b中的元素j不在c中则将b中的元素放在c中
&&&LC.a[LC.len]
&&&LC.len =
LC.len + 1;
void sequentlist::Union(sequentlist &LA,sequentlist
&LB,sequentlist &LC)
LC.len = 0;
//先将a中的元素赋到c中
for( i = 0; i & LA.i++)
&LC.a[i] = LA.a[i];
//将b中的元素插入到c的后面
for( j = 0;j & LB.j++)
&LC.a[LC.len + j] = LB.a[j];
LC.len = i +
//对c中的元素进行排序,升序排列
for(int t = LC.len -1; t & 0; t--)
&for( j = 0; j &j++)
&&if( LC.a[j] &
LC.a[j+1])
& //临时交换变量
LC.a[j+1];
&&&LC.a[j+1] =
&&&LC.a[j] =
void main(){
//定义线性表L
&sequentlist L;
&L.len = 10;& //定义L的实际表长
&L.Get(L); //控制台输入L的元素
&L.Getout(L);& //输出插入后的线性表L
&L.Locate(L,10); //查找元素10是否在线性表中
&L.Insert(L,3,5);&
//将元素3查到第5个位置
&L.Getout(L);
&L.Delete(L,2); //删除L的第2个位置上的元素
&L.Getout(L);
&//定义线性表
&sequentlist LA , LB,LC;
&LA.len = 4;
&LA.Get(LA);
&LB.len = 7;
&LB.Get(LB);
&//求线性表的a与b并集,并逆序排列
&LC.Union(LA,LB,LC);
&LC.Getout(LC);
&//求 线性表a与b的交集
&LC.Intersection(LA,LB,LC);
&LC.Getout(LC);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。课程名称读取中
支付宝支付
由百度提供技术支持
&学院APP&&
扫描微信二维码精彩活动、课程更新抢先知
下载客户端,离线视频任您学
2.&线性表的逻辑结构与基本运算
3.&线性表的顺序存储结构
4.&创建线性表的实现(暨参数类型的讨论)
5.&顺序表基本运算的实现
6.&线性表顺序存储的应用
7.&实践指导:用程序实践算法
8.&线性表的链式存储
9.&建立单链表
10.&单链表基本操作的实现
11.&单链表应用举例
12.&双链表
13.&循环链表
14.&线性表的应用
15.&有序表
加入购物车
【课程类型】技术教程
【难度级别】中级
【适合人群】计算机相关专业学生
【课程介绍】 数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第2部分,线性表的逻辑结构,线性表的顺序表和链表两种存储结构,以及在各种存储结构中基本运算的实现,还通过相关的应用案例介绍了相关知识的应用方法。
【课程目标】 系列课程的目标是帮助学习者系统掌握数据结构课程的相关知识,具备利用这些知识分析问题、解决问题的能力。本课是系列课程中的第2部分,具体目标包括:掌握线性表的特征以及逻辑结构定义;掌握顺序表存储结构,及各种基本运算的实现;掌握单链表存储结构,及各种基本运算的实现;了解双链表、循环链表、有序表的存储、应用;学会用线性表解决实际问题。
【课程计划】 本系列课程的建设,与烟台大学2016年下半年计算机科学与技术专业数据结构课程的教学同步进行。根据各分系列内容多少,每1-2周完成一个系列,每周提交8-10个视频,在4个月内完成建设。
请,看示例程序、实践项目与指导,用实践的方法完成学习。
全部评价(2)
有没有代码呀?
请,看示例程序、实践项目与指导,用实践的方法完成学习。
15课程235974学员
参考知识库
为您推荐课程
讲师:贺利坚 48课时
讲师:贺利坚 40课时
讲师:贺利坚 87课时
讲师:贺利坚 43课时
讲师:贺利坚 8课时1339人阅读
算法(17)
有很多文章内容很丰富,但阅读的人很少,其之所以曲高和寡,大概是因为大部分的人看起来有难度。下面我总结了一下线性表的应用,以飨读者,为了方便初学者学习,每个程序都经过我调试运行,大家可阅之,运行之,有意见欢迎提出,欢迎留言。
基本的线性表有三种类型:顺序表、链表和静态链表,下面有三个程序,对应上述的三种链表。
/*------很简单的顺序线性表------*/
#include &stdio.h&
#include &stdlib.h&
#include&stdio.h&
//输入输出函数头文件
#include&stdlib.h&
//内存申请函数头文件
#define LIST_INIT_SIZE 10
//定义最初申请的内存的大小
#define LIST_INCREMENT 2
//每一次申请内存不足的时候扩展的大小
#define OVERFLOW false
//异常抛出返回值
#define ERROR false
//异常抛出返回值
#define INFEASIBLE false //异常抛出返回值
#define OK true
//程序正确执行抛出返回值
typedef int ElemT
//别名声明,其实int可以用任意的名字代入
typedef bool S
//别名声明
typedef struct SqList
ElemType *
void InitList(SqList &L)
//初始条件:无
L.base=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.base)
exit(OVERFLOW);
//储存分配失败
//空表长度为0
L.size=LIST_INIT_SIZE;
//初始储存容量
//删除节点后,后面的节点要移动
//插入的位置是给出的
Status InsertList(SqList &L, int i, ElemType e)
ElemType *newbase,*q,*p;
if(i&1||i&L.len+1) //插入的位置不合法
return ERROR;
if(L.len&=L.size)
if(!(newbase=(ElemType *)realloc(L.base,(L.size+LIST_INCREMENT)*sizeof(ElemType))))
exit(OVERFLOW);
L.size += LIST_INCREMENT;
q = L.base+i-1;
for(p=L.base+L.len-1;p&=q;--p)
*(p+1) = *p;
return OK;
//插入节点后,后面的节点要移动
Status DeleteList(SqList &L, int i,ElemType &e)
ElemType *p, *q;
if(i&1||i&L.len)
return ERROR;
p = L.base+i-1;
q = L.base+L.len-1;
for(++p;p&=q;++p)
*(p-1) = *p;
return OK;
int compare(int x,int y)
return x!=y;
int LocateElem(SqList L, ElemType e, int type)
ElemType *p;
while(i&=L.len&&compare(*p++,e))
if(i&L.len)
Status GetElem(SqList L,int i,ElemType &e)
if(i&1||i&L.len)
return ERROR;
e = *(L.base+i-1);
return OK;
/********************** 输入函数 **********************/
void InitListALL(SqList *L)
L-&base=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
printf(&enter the length:&);
scanf(&%d&,&L-&len);
for(int i=0;i&L-&i++)
scanf(&%d&,L-&base+i);
/********************** 输出函数 **********************/
void OutList(SqList *L)
for(int i=0;i&L-&i++)
printf(&%d\t&,*(L-&base+i));
void Union(SqList &La, SqList Lb)
int len1 = La.
int len2 = Lb.
for (i=1;i&Lb.i++)
GetElem(Lb,i,e);
if(!LocateElem(La,e,0))
InsertList(La,++len1,e);
//La 和 Lb 都是非递减排列
void MergeList1(SqList La, SqList Lb, SqList &Lc)
InitList(Lc);
int i=1,j=1,k=0;
ElemType ai,
while(i&=La.len&&j&=Lb.len)
GetElem(La,i,ai);
GetElem(Lb,j,bj);
if(ai&=bj)
InsertList(Lc,++k,ai);
InsertList(Lc,++k,bj);
while(i&=La.len)
GetElem(La,i++,ai);
InsertList(Lc,++k,ai);
while(j&=La.len)
GetElem(Lb,j++,bj);
InsertList(Lc,++k,bj);
void MergeList2(SqList La,SqList Lb, SqList &Lc)
int *pa,*pb,*pa_last,*pb_last,*
Lc.size = Lc.len =La.len+Lb.
pc = Lc.base = (ElemType *)malloc(sizeof(ElemType)*Lc.size);
if(!Lc.base)
exit(OVERFLOW);
pa_last = La.base + La.len-1;
pb_last = Lb.base + Lb.len-1;
while(pa&=pa_last&&pb&=pb_last)
if(*pa&=*pb)
*pc++=*pa++;
*pc++=*pb++;
while(pa&=pa_last)
*pc++=*pa++;
while(pb&=pb_last)
*pc++=*pb++;
int main()
/********************** 函数声明区域 **********************/
void InitList(SqList &L);
Status ListInsert(SqList &L,int i,ElemType e);
int ListLength(SqList L);
int LocateElem(SqList L,ElemType e,int type);
int compare(int x,int y);
void Union(SqList &La,SqList Lb);
void InitListALL(SqList *L);
void OutList(SqList *L);
/********************** 程序执行区域 **********************/
SqList La,Lb;
//定义顺序表La,Lb
InitListALL(&La);
InitListALL(&Lb);
Union(La,Lb);
//把B表插入到A表中
OutList(&La);
/********************** 声明部分 **********************/
#include&stdio.h&
//输入输出函数头文件
#include&stdlib.h&
//内存申请函数头文件
#define LIST_INIT_SIZE 10
//定义最初申请的内存的大小
#define LIST_INCREMENT 2
//每一次申请内存不足的时候扩展的大小
#define OVERFLOW false
//异常抛出返回值
#define ERROR false
//异常抛出返回值
#define INFEASIBLE false //异常抛出返回值
#define OK true
//程序正确执行抛出返回值
typedef int ElemT
//别名声明,其实int可以用任意的名字代入
typedef bool S
//别名声明
typedef struct LNode
struct LNode *
}LNode,*LinkL
void InitListALL(LinkList &L)
int i=0,e;
LinkList p = L,s;
printf(&Please input the length:\n&);
scanf(&%d&,&len);
for(i=0;i&i++)
//顺序链表的空间是一次性分配的,链式链表的空间是一个节点一个节点分配的
s = (LinkList)malloc(sizeof(LNode));
scanf(&%d&,&e);
p-&next =s;
void OutList(LinkList &L)
LinkList p = L-&
while(p!=NULL)
printf(&%d&,p-&data);
Status GetElem(LinkList L,int i,ElemType &e)
int j = 1;
LinkList p = L-&
while(p&&j&i)
if(!p||j&i)
return ERROR;
return OK;
//在第i个位置之前插入新节点e
Status ListInsert(LinkList L, int i, ElemType e)
int j = 0;
LinkList p=L,s;
while(p&&j&i-1)
if(p==NULL||j&i)
return ERROR;
= (LinkList)malloc(sizeof(LNode));
s-&next = p-&
return OK;
//这个函数还是很巧妙的
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
LinkList pa,pb,
Lc = pc = La; //用La的头结点作为Lc的头节点
while(pa&&pb)
if(pa-&data&=pb-&data)
pc-&next =
pc-&next =
pc-&next = pa?pa:
int main()
/********************** 函数声明区 **********************/
void InitListALL(LinkList &L);
void OutList(LinkList &L);
/********************** 程序执行区 **********************/
LinkList La,Lb,Lc;
La=(LinkList)malloc(sizeof(LNode));
Lb=(LinkList)malloc(sizeof(LNode));
InitListALL(La);
InitListALL(Lb);
MergeList(La,Lb,Lc);
OutList(Lc);
静态链表:
/********************** 声明部分 **********************/
#include&stdio.h&
//输入输出函数头文件
#include&stdlib.h&
//内存申请函数头文件
#define LIST_INIT_SIZE 10
//定义最初申请的内存的大小
#define LIST_INCREMENT 2
//每一次申请内存不足的时候扩展的大小
#define OVERFLOW false
//异常抛出返回值
#define ERROR false
//异常抛出返回值
#define INFEASIBLE false //异常抛出返回值
#define OK true
//程序正确执行抛出返回值
#define DestroyList ClearList
//两个函数实现的效果是一样的
#define MAX_SIZE 100
//最大的初始容量
typedef int ElemT
//别名声明,其实int可以用任意的名字代入
typedef bool S
//别名声明
/********************** 结构体定义部分 **********************/
typedef struct{
}component,SLinkList[MAX_SIZE];
void InitList(SLinkList L)
L[MAX_SIZE-1].cur = 0; //L的最后一个元素只想表头
for(i=0;i&MAX_SIZE;i++)
L[i].cur = i+1;
L[MAX_SIZE-2].cur = 0;
void InitListAll(SLinkList L)
printf(&Please input the list you want\n&);
scanf(&%d&,&Length);
for(i=1;i&=Li++)
scanf(&%d&,&L[i].data);
void OutList(SLinkList L)
for(i=1;i&=Li++)
printf(&%d
&,L[i].data);
int LocateElem(SLinkList L,ElemType e)
int i = L[0].
while(i&&L[i].data!=e)
//判断链表是否为空,
int IsEmpty(SLinkList L)
if(L[0].cur)
L[0].cur = L[i].
//回收指定下标的节点到备用链表中
void Free(SLinkList L,int k)
L[k].cur = L[0].
L[0].cur =
/********************** 一次输入两个集合的元素,建立(A-B)U(B-A)的静态链表,S为其头指针。假设备用空间足够大,L[0]为其头指针 **********************/
void differecce(SLinkList &L,int &S)
int r,m,n,i,j;
InitList(L);
//初始化备用空间
S=IsEmpty(L);
//生成S的头结点
//r指向S的当前最后节点
printf(&please enter the length of A and B:&);
scanf(&%d %d&,&m,&n);
//输入A和B的元素个数
Length=m+n;
for(j=1;j&=m;++j)
//建立A的链表
i=IsEmpty(L);
//分配节点
scanf(&%d&,&L[i].data);
//输入A的元素值
L[r].cur=i;
//插入到表尾
L[r].cur=0;
//尾节点的指针为空
int b,p,k;
for(j=1;j&=n;++j)
//依次输入B元素,若不在当前表中,则插入,否则删除
scanf(&%d&,&b);
//K指向集合A中第一个结点
while(k!=L[r].cur&&L[k].data!=b)
{//在当前表中查找
if(k==L[r].cur)
//假如当前表中没有所说的这个元素
i=IsEmpty(L);
L[i].data=b;
L[i].cur=L[r].
L[i].cur=i;
//该元素已经在表中,删除之
L[p].cur=L[k].
Free(L,k);
int main()
/********************** 函数声明区 **********************/
void InitList(SLinkList L);
void InitListAll(SLinkList L);
void OutList(SLinkList L);
int LocateElem(SLinkList L,ElemType e);
/********************** 程序执行区 **********************/
SLinkList L;
InitList(L);
InitListAll(L);
printf(&please enter the number you want:&);
scanf(&%d&,&e);
number=LocateElem(L,e);
OutList(L);
printf(&the place is %d\n&,number);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:125258次
积分:1770
积分:1770
排名:第15440名
原创:50篇
评论:55条
关注技术50年,一心只为技术狂。推广微博: @MachineLearning-ZJU /u/?topnav=1&wvr=6&topsug=1数据结构实用教程(C++版)(万健)【电子书籍下载 epub txt pdf doc 】
书籍作者:
书籍出版:
电子工业出版社
书籍页数:
书籍ISBN:
书籍人气:
推荐指数:
数据结构实用教程(C++版)《高等学校工程创新型&十二五&规划计算机教材》为国家级优秀教学团队教学成果。《数据结构实用教程(C++版)》根据教育部高等学校计算机科学与技术教学指导委员会制定的《高等学校计算机科学与技术专业发展战略研究报告暨专业规范》编写,首先介绍了数据结构的核心基础知识&&数据、数据类型、数据结构等基本概念和算法、算法的性能度量等知识,然后集中讨论了四种基本的数据结构&&集合、线性表、树和图,同时介绍了栈、队列、串、数组以及广义表等数据结构,最后介绍了排序和查找的几种基础算法及实现(用C++语言)。本书强调数据结构的工程应用,以模板的形式给出各种不同数据对象应用数据结构的多个实例,从而实现数据结构与工程应用的有机结合。本书可以作为高等院校计算机及相关专业学生的教材,也可供培训机构及自学者参考。第1章 绪论
1.1 数据与数据类型
1.1.1 数据
1.1.2 数据的计算机表示与数据类型
1.1.3 抽象数据类型
1.2 数据结构
1.3 算法与算法分析
1.3.1 算法
1.3.2 算法的性能分析与度量
1.3.3 算法的时间复杂度
1.3.4 算法的空间复杂度
第2章 线性表
2.1 线性表的类型定义及结构特征
2.2 线性表类型的实现&&顺序映像
2.3 线性表类型的实现&&链式存储映像
2.3.1 单链表
2.3.2 其他形式的链表
2.4 线性表的应用
2.4.1 两个有序表的合并
2.4.2 集合运算
2.4.3 一元多项式的表示和相加
第3章 其他线性结构
3.1.1 栈的定义和基本操作
3.1.2 栈的存储结构及操作实现
3.1.3 栈的应用举例
3.2.1 队列的定义和基本操作
3.2.2 队列的存储结构及操作实现
3.2.3 队列应用举例
3.3.1 串的基本概念和基本操作
3.3.2 串的存储结构
3.4.1 数组的定义和基本操作
3.4.2 数组的存储表示
3.4.3 特殊矩阵的压缩存储
3.4.4 稀疏矩阵的压缩存储
3.5 广义表
3.5.1 广义表的基本概念和基本操作
3.5.2 广义表的存储结构
第4章 树型结构
4.1 树、森林的定义及基本术语
4.2 二叉树
4.2.1 二叉树的结构定义
4.2.2 几种特殊形态的二叉树
4.2.3 二叉树的性质
4.2.4 二叉树的存储结构
4.2.5 二叉链表类的定义
4.2.6 二叉树的递归遍历
4.2.7 几个二叉树基本操作的例子
4.2.8 二叉树的非递归遍历
4.2.9 其他部分成员函数的实现
4.2.10 主函数(演示二叉链表类部分基本操作的执行结果)
4.2.11 线索二叉树
4.3 树与森林的再讨论
4.3.1 树的存储结构
4.3.2 树和森林的遍历
4.4 树型结构的应用
4.4.1 算术表达式求值
4.4.2 树与等价问题
4.4.3 赫夫曼树及赫夫曼编码
5.1 图的定义和术语
5.2 图的存储结构
5.2.1 邻接矩阵表示法
5.2.2 邻接表表示法
5.2.3 十字链表表示法
5.2.4 邻接多重表表示法
5.3 图的基本操作
5.3.1 类的定义与实现
5.3.2 图的遍历
5.3.3 图的连通性
5.4 最小生成树
5.4.1 Prim算法
5.4.2 Kruskal算法
5.5 拓扑排序和关键路径
5.5.1 有向无环图
5.5.2 拓扑排序
5.5.3 关键路径
5.6 最短路径
5.6.1 单源最短路径
5.6.2 每对顶点间的最短路径
第6章 查找
6.1 查找表的定义
6.2 静态查找表
6.2.1 顺序查找
6.2.2 折半查找
6.2.3 分块查找
6.3 动态查找表
6.3.1 二叉排序树
6.3.2 平衡二叉排序树
6.3.3 B?树和B+树
6.4 哈希查找
6.4.1 哈希表的定义
6.4.2 哈希函数的构造方法
6.4.3 处理冲突的办法
6.4.4 哈希表的查找及分析
6.4.5 哈希表的构建与查找算法
第7章 排序
7.1 插入类排序
7.1.1 直接插入排序
7.1.2 折半插入排序
7.1.3 2-路插入排序
7.1.4 希尔排序
7.2 分划类排序
7.2.1 冒泡排序
7.2.2 快速排序
7.3 选择类排序
7.3.1 简单选择排序
7.3.2 树形选择排序
7.3.3 堆排序
7.4 归并类排序
7.5 基数排序
7.5.1 多关键字的排序
7.5.2 基数排序
7.6 内部排序的比较
7.7 外部排序
7.7.1 外部存储设备
7.7.2 外部排序的方法
7.7.3 败者树C++线性表的基本操作求大神代码
[问题点数:50分,结帖人Poroporo]
C++线性表的基本操作求大神代码
[问题点数:50分,结帖人Poroporo]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2016年1月 C/C++大版内专家分月排行榜第一
2016年2月 C/C++大版内专家分月排行榜第二2015年12月 C/C++大版内专家分月排行榜第二2015年11月 C/C++大版内专家分月排行榜第二
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 什么是线性表 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信