拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

栈(考研复习)

栈(考研复习)

一、采用顺序存储结构实现栈(即顺序栈)

总结:

Stack.h

#pragmaonce#include<stdio.h>#include<stdbool.h>#defineMaxSize10typedefintElemType;// 采用顺序结构实现栈// 定义栈的结构typedefstructSqStack{ElemType arr[MaxSize];// 栈中最多可以存储MaxSize个ElemType类型的数据inttop;// top是栈顶指针,指向栈顶元素}SqStack;// 栈的初始化voidInit(SqStack&S);// 判断栈是否为空。为空返回true,否则返回false。boolEmpty(SqStack S);// 新元素x入栈boolPush(SqStack&S,ElemType x);// 删除栈顶元素(出栈操作),并将栈顶元素的值赋给变量eboolPop(SqStack&S,ElemType&e);// 获取栈顶元素,并将栈顶元素的值赋给变量eboolGetTop(SqStack S,ElemType&e);

Stack.cpp

#define_CRT_SECURE_NO_WARNINGS1#include"Stack.h"// 栈的初始化voidInit(SqStack&S){S.top=-1;}// 判断栈是否为空。为空返回true,否则返回falseboolEmpty(SqStack S){if(S.top==-1)returntrue;// 栈为空elsereturnfalse;// 栈不为空}// 新元素x入栈boolPush(SqStack&S,ElemType x){if(S.top==MaxSize-1)// 此时表示栈中已经存满了元素,无法执行入栈操作returnfalse;S.top++;S.arr[S.top]=x;// 将新元素x放到栈顶的位置returntrue;}// 删除栈顶元素(出栈操作),并将栈顶元素的值赋给变量eboolPop(SqStack&S,ElemType&e){if(S.top==-1)// 表示此时栈为空,无法执行出栈操作returnfalse;e=S.arr[S.top];// 将栈顶元素赋给eS.top--;returntrue;}// 获取栈顶元素,并将栈顶元素的值赋给变量eboolGetTop(SqStack S,ElemType&e){if(S.top=-1)returnfalse;// 表示栈为空,无法指向获取栈顶元素的操作e=S.arr[S.top];returntrue;}

二、共享栈

共享栈就是两个栈共享同一片空间

// 定义共享栈的结构(两个栈共享同一块内存,这两个栈分别命名为0号栈与1号栈)#defineMaxSize10typedefintElmeType;typedefstructShStack{ElmeType data[MaxSize];inttop0;// 0号栈的栈顶指针inttop1;// 1号栈的栈顶指针}ShStack;// 共享栈的初始化voidInitStack(ShStack&S){S.top0=-1;S.top1=MaxSize;}// 共享栈满了的条件:S.top0+1 == S.top1

三、掌握算法思想即可,不用写代码(2025年02考了):算法题:栈在括号匹配中的应用

#define_CRT_SECURE_NO_WARNINGS1#defineMaxSize10typedefcharElemType;// 采用顺序结构实现栈// 定义栈的结构typedefstructSqStack{ElemType arr[MaxSize];// 栈中最多可以存储MaxSize个ElemType类型的数据inttop;// top是栈顶指针,指向栈顶元素}SqStack;// 栈的初始化voidInit(SqStack&S){S.top=-1;}// 判断栈是否为空。为空返回true,否则返回falseboolEmpty(SqStack S){if(S.top==-1)returntrue;// 栈为空elsereturnfalse;// 栈不为空}// 新元素x入栈boolPush(SqStack&S,ElemType x){if(S.top==MaxSize-1)// 此时表示栈中已经存满了元素,无法执行入栈操作returnfalse;S.top++;S.arr[S.top]=x;// 将新元素x放到栈顶的位置returntrue;}// 删除栈顶元素(出栈操作),并将栈顶元素的值赋给变量eboolPop(SqStack&S,ElemType&e){if(S.top==-1)// 表示此时栈为空,无法执行出栈操作returnfalse;e=S.arr[S.top];// 将栈顶元素赋给eS.top--;returntrue;}// 字符数组str存储length个括号字符,若这些括号字符是匹配的,就返回true,否则返回falseboolbracketCheck(charstr[],intlength){// 创建一个栈SqStack s;// 对栈进行初始化Init(s);for(inti=0;i<length;i++){// 当遍历到左括号,就让左括号入栈if(str[i]=='{'||str[i]=='['||str[i]=='('){Push(s,str[i]);}else// 当遍历到右括号时,就让栈顶的左括号出栈,看看是否与右括号匹配{if(Empty(s))// 栈顶的左括号出栈前,要判断栈此时是否为空,如果为空直接返回falsereturnfalse;chartemp;Pop(s,temp);;// 让栈顶元素出栈,并将栈顶元素的值赋给tempif(temp=='('&&str[i]!=')')returnfalse;if(temp=='['&&str[i]!=']')returnfalse;if(temp=='{'&&str[i]!='}')returnfalse;}}// 当所有的括号遍历完之后,如果此时栈为空,表示括号匹配成功,否则匹配失败returnEmpty(s);}
返回列表