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

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


前言

提示:本篇文章收录严蔚敏编写的数据结构C语言版本
简单介绍一下顺序表,顺序栈,循环队列,的顺序存储结构之间的区别
代码参考严蔚敏编写的《数据结构》,二维码动态演示可扫码可观看。

在这里插入图片描述

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

文章目录

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

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

代码如下(示例):

#include#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页)
请添加图片描述

三、电子教材

网盘链接:https://pan.baidu.com/s/1IO3oDVsXxrhWLkndDwGcvw?pwd=8888
提取码:8888

四、总结

对三种顺序存储结构的总结归纳横向对比
本篇文章归纳了《数据结构》严蔚敏编写的C语言第二版中一、二、三章节的顺序存储结构的线性表,如:顺序表,顺序栈,顺序队列的结构定义、初始化、元素插入、元素删除、元素取值的基本操作。
想要实现脱离教材,实现代码,少不了自己动手编写代码,首先要领会教材的算法的每一个步骤,多画图理解,观看动画演示。
今天的分享就到这里啦,喜欢的小伙伴可以点赞收藏。