数据结构(C语言第二版)严蔚敏编,数据结构电子教材,线性表,栈,队列,顺序存储结构,初始化,入栈,出栈,入队,出队,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为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++相关推荐
- 数据结构c语言程序题,严蔚敏《数据结构(c语言版)习题集》(包括基础部分).doc...
严蔚敏<数据结构(c语言版)习题集>(包括基础部分).doc 线性表第1章绪论11简述下列术语数据,数据元素.数据对象.数据结构.存储结构.数据类型和抽象数据类型.解数据是对客观事物的符号 ...
- 数据结构(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) ...
- 数据结构(C语言)第二版 第一章课后答案
数据结构(C语言)第二版 第一章课后答案 这本书,我以后也会用,所以趁着考完试做个整理,顺便分享出来.电子资源发不出来,放评论区吧,有需要自取. 1. 简述下列概念:数据.数据元素.数据项.数据对象. ...
- 数据结构(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 依次进栈,则 ...
- 数据结构(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) ...
- 数据结构(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)在一个图中,所有顶点的度数之和等于图的边数 ...
- 数据结构学习笔记——线性表逻辑结构和顺序存储结构
2.1线性表的逻辑结构 线性表的数据元素的特点:同一数据类型 一.线性表的逻辑定义 线性表是由n个数据元素(结点)a1,a2,-,an组成的有限序列. 二.线性表的基本运算 2.2线性表的顺序存储结 ...
- c语言第二版课后答案pdf,数据结构(C语言版)第2版习题答案—严蔚敏.pdf
数据结构( C语言版) (第2版) 课后习题答案 李冬梅 2015.3 目 录 第 1 章 绪论 1 第 2 章 线性表 5 第 3 章 栈和队列 14 第 4 章 串.数组和广义表 27 第 5 章 ...
- 数据结构c语言版第二版(严蔚敏)第五章笔记
目录 树和二叉树的定义 树的定义 树的基本术语 二叉树的定义 二叉树的性质和存储结构 二叉树的性质 二叉树的存储结构 顺序存储结构 链式存储结构 遍历二叉树和线索二叉树 遍历二叉树 先序遍历 中序遍历 ...
最新文章
- JQuery $post函数
- 月读の自动读取 根据注释解析列名和字典
- 【前端】递归之引起堆栈溢出解决方案
- DotNet Framework 版本历史
- mac 如何查看anaconda的路径_Mac OS如何直接查看gif图片?分享MAC直接查看gif图片的三种方法...
- Thinkphp5 请求报错
- Weblogic Session复制策略与方式
- ASP.NET Core在MacOS上建立HTTPS开发证书
- 数据预处理之将类别数据数字化的方法 —— LabelEncoder VS OneHotEncoder
- 在Windows宿主机中ssh连接虚拟机CentOS中的Docker容器
- 使用Hbuilder将自己app发布到App Store
- 游戏组件——Game类
- 谷歌离线地图开源地图服务器
- 软件质量管理-考试复习总结
- [PHP] 新浪企业邮箱登录功能难点梳理
- MySql安装 Staring the server出错
- 201671010457 朱石景 实验四《英文文本词频统计分析》 结对项目报告
- 图形2d,3d加速简介
- 【多益网络校招提前批】22届的同学可以冲啦
- matlab sparse
热门文章
- 实用性超强的微信小程序集合,完全的福利大放送!
- 【云栖风向标】VOL.2:1分钟带你了解阿里云2017财报
- linux和windows双系统互拷文件乱码问题,linux和windows双系统互拷文件乱码问题
- 启用LSI 2208阵列卡JBOD模式
- IDEA运行报错:类文件具有错误的版本 55.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。
- 跨境人必须了解:7种跨境电商营销推广理念
- 解决 Vue 请求拦截器 无法执行
- 基于S2SH+ExtJS4+Oracle9i技术实战开发电子商业汇票系统(银行内系统通讯)
- 地平线战投后 这家智能驾驶“新星”又获国电投“大平台”强劲助力
- 正点原子----Linux设备树详解