前言

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

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

  1. 数据结构c语言程序题,严蔚敏《数据结构(c语言版)习题集》(包括基础部分).doc...

    严蔚敏<数据结构(c语言版)习题集>(包括基础部分).doc 线性表第1章绪论11简述下列术语数据,数据元素.数据对象.数据结构.存储结构.数据类型和抽象数据类型.解数据是对客观事物的符号 ...

  2. 数据结构(C语言)第二版 第四章课后答案

    数据结构(C语言)第二版 第四章课后答案 1~5 B B C A B 6~10 B B C B B 11~15 A B D (C,B) C 1.选择题 (1)串是一种特殊的线性表,其特殊性体现在(B) ...

  3. 数据结构(C语言)第二版 第一章课后答案

    数据结构(C语言)第二版 第一章课后答案 这本书,我以后也会用,所以趁着考完试做个整理,顺便分享出来.电子资源发不出来,放评论区吧,有需要自取. 1. 简述下列概念:数据.数据元素.数据项.数据对象. ...

  4. 数据结构(C语言)第二版 第三章课后答案

    数据结构(C语言)第二版 第三章课后答案 1~5 C C D A A 6~10 D A B C D 11~15 D D B C B 1.选择题 (1)若让元素1, 2, 3 , 4, 5 依次进栈,则 ...

  5. 数据结构(C语言)第二版 第五章课后答案

    数据结构(C语言)第二版 第五章课后答案 1~5 A D D C A 6~10 C C B D C 11~15 B C A C A 1.选择题 (1)把一棵树转换为二叉树后,这棵二叉树的形态是(A) ...

  6. 数据结构(C语言)第二版 第六章课后答案

    数据结构(C语言)第二版 第六章课后答案 1~5 C B B B C 6~10 B A B A A 11~15 D C C (D,D) B 1.选择题 (1)在一个图中,所有顶点的度数之和等于图的边数 ...

  7. 数据结构学习笔记——线性表逻辑结构和顺序存储结构

    2.1线性表的逻辑结构  线性表的数据元素的特点:同一数据类型 一.线性表的逻辑定义 线性表是由n个数据元素(结点)a1,a2,-,an组成的有限序列. 二.线性表的基本运算 2.2线性表的顺序存储结 ...

  8. c语言第二版课后答案pdf,数据结构(C语言版)第2版习题答案—严蔚敏.pdf

    数据结构( C语言版) (第2版) 课后习题答案 李冬梅 2015.3 目 录 第 1 章 绪论 1 第 2 章 线性表 5 第 3 章 栈和队列 14 第 4 章 串.数组和广义表 27 第 5 章 ...

  9. 数据结构c语言版第二版(严蔚敏)第五章笔记

    目录 树和二叉树的定义 树的定义 树的基本术语 二叉树的定义 二叉树的性质和存储结构 二叉树的性质 二叉树的存储结构 顺序存储结构 链式存储结构 遍历二叉树和线索二叉树 遍历二叉树 先序遍历 中序遍历 ...

最新文章

  1. JQuery $post函数
  2. 月读の自动读取 根据注释解析列名和字典
  3. 【前端】递归之引起堆栈溢出解决方案
  4. DotNet Framework 版本历史
  5. mac 如何查看anaconda的路径_Mac OS如何直接查看gif图片?分享MAC直接查看gif图片的三种方法...
  6. Thinkphp5 请求报错
  7. Weblogic Session复制策略与方式
  8. ASP.NET Core在MacOS上建立HTTPS开发证书
  9. 数据预处理之将类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder
  10. 在Windows宿主机中ssh连接虚拟机CentOS中的Docker容器
  11. 使用Hbuilder将自己app发布到App Store
  12. 游戏组件——Game类
  13. 谷歌离线地图开源地图服务器
  14. 软件质量管理-考试复习总结
  15. [PHP] 新浪企业邮箱登录功能难点梳理
  16. MySql安装 Staring the server出错
  17. 201671010457 朱石景 实验四《英文文本词频统计分析》 结对项目报告
  18. 图形2d,3d加速简介
  19. 【多益网络校招提前批】22届的同学可以冲啦
  20. matlab sparse

热门文章

  1. 实用性超强的微信小程序集合,完全的福利大放送!
  2. 【云栖风向标】VOL.2:1分钟带你了解阿里云2017财报
  3. linux和windows双系统互拷文件乱码问题,linux和windows双系统互拷文件乱码问题
  4. 启用LSI 2208阵列卡JBOD模式
  5. IDEA运行报错:类文件具有错误的版本 55.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。
  6. 跨境人必须了解:7种跨境电商营销推广理念
  7. 解决 Vue 请求拦截器 无法执行
  8. 基于S2SH+ExtJS4+Oracle9i技术实战开发电子商业汇票系统(银行内系统通讯)
  9. 地平线战投后 这家智能驾驶“新星”又获国电投“大平台”强劲助力
  10. 正点原子----Linux设备树详解