数据结构(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++的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux环境搭建】十三、Linux(
- 下一篇: VC++隐藏任务栏(附源码)