100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 数据结构(C语言第二版)严蔚敏编 数据结构电子教材 线性表 栈 队列 顺序存储结构

数据结构(C语言第二版)严蔚敏编 数据结构电子教材 线性表 栈 队列 顺序存储结构

时间:2020-01-23 21:41:21

相关推荐

数据结构(C语言第二版)严蔚敏编 数据结构电子教材 线性表 栈 队列 顺序存储结构

前言

提示:本篇文章收录严蔚敏编写的数据结构C语言版本

简单介绍一下顺序表,顺序栈,循环队列,的顺序存储结构之间的区别

代码参考严蔚敏编写的《数据结构》,二维码动态演示可扫码可观看。

提示:结合教材更容易理解

文章目录

前言一、代码的宏定义、重定义、名称解释。二、三种线性表顺序表、顺序栈、循环链表五个算法1.顺序存储结构2.初始化3.插入,入栈,入队4.删除,出栈,出队5.取值三、电子教材四、总结

一、代码的宏定义、重定义、名称解释。

代码如下(示例):

#include<iostream>#define OK 1 //算法成功实现返回1#define ERROR -1//算法错误返回-1#define OVERFLOW -2 //错误返回值#define MAXSIZE 100 //数组最大容量using namespace std; // c++typedef int Status;//重命名 int为Statustypedef char Elemtype; //重命名 cahr为Elemtype(元素类型)

SqList代表顺序表,SqStack代表顺序栈,SqQueue代表顺序队列

二、三种线性表

顺序表、顺序栈、循环链表五个算法

1.顺序存储结构

代码如下(示例):

typedef struct {//顺序表存储结构Elemtype * elem; //数组基地址 a[0]中a的地址int length; //顺序表表长}SqList; //顺序表的结构类型为SqListtypedef struct {//顺序栈存储结构Elemtype *base; // 栈底指针,指向栈底不变化Elemtype *top; //栈顶指针 只移动栈顶指针,top++ top--int Stacksize; //栈的最大容量}SqStack;typedef struct {//循环队列顺序存储结构Elemtype *base; //基地址 a[10]的aint front; //头指针 处理出队操作int rear; //尾指针 处理入队操作}SqQueue;

2.初始化

代码如下(示例):

Status Initlist(SqList &l ){//顺序表初始化l.elem=new Elemtype [MAXSIZE]; //申请elem[100]if(!l.elem) return ERROR;// 申请失败退出l.length=0; // 表长值为0return OK; }Status Initstack(SqStack &s){//顺序栈初始化s.base =new Elemtype [MAXSIZE]; //申请char base[100]if(!s.base) return ERROR; //申请失败退出s.base=s.top; //空栈s.Stacksize=MAXSIZE;//把最大容量赋值给Stacksizereturn OK;}Status Initqueue(SqQueue &Q){//循环队顺序存储列初始化Q.base=new Elemtype [MAXSIZE];//申请char base[100]if(!Q.base)return ERROR;//申请失败退出Q.front=Q.rear=0;//空队列return OK;}

顺序表初始化(教材25页)

顺序栈初始化(教材58页)

循环队列(教材71页)

3.插入,入栈,入队

代码如下(示例):

Status Inserlist(SqList &l,int i,Elemtype e){//顺序表插入元素if((i<1)||(i>l.length+1)) return ERROR; // 判断插入位置是否合理if(l.length==MAXSIZE)return ERROR; //判断表是否已满for(int j=l.length-1;j>=i-1;j--) //依次从length-1后移覆盖元素l.elem[j+1]=l.elem[j];//覆盖l.elem[i-1]=e; //存放插入元素给el.length++; //表长加一return OK; }Status Push(SqStack &s,Elemtype e){//顺序栈入栈,不需要int i,只能在top操作if(s.top-s.base==s.Stacksize) return ERROR;//判断是否栈满*s.top=e;//保存元素a[top]=es.top++;//头指针加一top++return OK;//}Status Enqueue(SqQueue &Q,Elemtype e){//循环队列入队,没有int i,rear队尾入队if((Q.rear+1)%MAXSIZE==Q.front) //判断return ERROR;Q.base[Q.rear]=e;// a[rear]=eQ.rear=(Q.rear+1)%MAXSIZE;//指向下一个元素return OK;}

一般顺序表插入(教材27页)

动态演示:插入、入栈、入队(59/72页)

4.删除,出栈,出队

代码如下(示例):

Status ListDelete(SqList &L,int i){//顺序表的删除,传入删除位置iif((i<1)||(i>L.length))//删除位置是否合理return ERROR; for(int j=i;j<=L.length-1;j++)//未删除元素依次先前覆盖元素L.elem[j-1]=L.elem[j];//elem[i+1]覆盖elem[i]达到删除目的L.length--;//表长减一return OK;}Status Pop (SqStack &S,Elemtype &e){//顺序栈的出栈if(S.top==S.base) return ERROR;//判空e=*S.top;//用e返回删除元素的值--S.top;//栈顶指针减一return OK;}Status DeQueue(SqQueue &Q,Elemtype &e){//循环队列的出队if(Q.rear==Q.front) return ERROR;//判空e=Q.base [Q.front];//用e返回删除元素的值Q.front=(Q.front+1)%MAXSIZE;//栈顶指针指向上一个return OK;}

动态演示:删除、出栈、出队(29/59/72页)

5.取值

代码如下(示例):

Elemtype Getelem(SqList L,int i,Elemtype &e){//顺序表的取值,i的位置if(i<1||i>L.length) return ERROR;//判断位置是否合理if(L.length!=0) //判断是否为空return e=L.elem[i-1];//用e返回第i个元素的值elem[i-1]}Elemtype GetTop(SqStack S){//顺序栈取值栈顶元素if(S.base!=S.top)//栈非空return *(S.top-1);//返回栈顶元素的值,栈顶指针不变,top--}Elemtype GetTop(SqQueue Q){//循环队列的取值if(Q.front!=Q.rear)//判空return Q.base[Q.front];//返回队列顶部元素}

动画演示:取值(26、59、73页)

三、电子教材

网盘链接:/s/1IO3oDVsXxrhWLkndDwGcvw?pwd=8888

提取码:8888

四、总结

对三种顺序存储结构的总结归纳横向对比

本篇文章归纳了《数据结构》严蔚敏编写的C语言第二版中一、二、三章节的顺序存储结构的线性表,如:顺序表,顺序栈,顺序队列的结构定义、初始化、元素插入、元素删除、元素取值的基本操作。

想要实现脱离教材,实现代码,少不了自己动手编写代码,首先要领会教材的算法的每一个步骤,多画图理解,观看动画演示。

今天的分享就到这里啦,喜欢的小伙伴可以点赞收藏。

数据结构(C语言第二版)严蔚敏编 数据结构电子教材 线性表 栈 队列 顺序存储结构 初始化 入栈 出栈 入队 出队 c++

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。