数据结构——顺序栈(类C代码实现)
本人为在读本科大学生,能力有限。
如有错误,请联系我更正(QQ:2169788850)或在评论区留言。
代码配合严蔚敏——数据结构(c语言版)和王卓老师网课编写,完全免费,仅供学习交流使用。
由于使用教材严蔚敏——数据结构(c语言版)中的代码为类C伪代码,并不直观,本系列旨在将所有代码在电脑上实现。
使用说明
宏定义部分保存为 “hong_define.h”
其余各部分可放在“sqstack.cpp” 切记切记切记后缀是 .cpp
宏定义
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
顺序栈的定义
//顺序栈
#include "hong_define.h"
#define MAXSIZE 100
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
}sqstack;
顺序栈的初始化
Status inistack(sqstack &s){
s.base =(ElemType*)malloc(MAXSIZE * sizeof(ElemType));
if(!s.base) exit (OVERFLOW);
s.top = s.base;
s.stacksize = MAXSIZE;
return OK;
}
判断顺序栈是否为空
Status isempty(sqstack s){
if(s.top == s.base )
{
printf("栈为空\n");
return TRUE;
}
else{
return FALSE;
}
}
顺序栈的销毁
Status destroystack(sqstack s){
if(s.base){
free(s.base);
s.stacksize =0;
s.base =s.top = NULL;
}
return OK;
}
顺序栈的清空
Status clearstack(sqstack s){
if(s.base){
s.top = s.base;
return OK;
}
return ERROR;
}
顺序栈的长度
int stacklength(sqstack s){
int length = s.top - s.base;
printf("栈的元素个数有%d个\n",length);
return length;
}
获取栈顶元素
Status gettop(sqstack s,ElemType &e){
if(s.top == s.base){
printf("栈为空\n");
return ERROR;
}
e = *s.top;
printf("栈顶元素是%d\n",e);
}
栈的遍历
Status trlsqstack(sqstack s) {
ElemType e;
for(int i=0;s.top > s.base;i++){
e = *(s.top-1); //取值时因为top实际指向栈顶上一位置,所以要减一操作
printf("栈的第%d个元素是%d\n",i + 1,e);
s.top--;
}
return OK;
}
入栈
Status pushstack(sqstack &s,ElemType e){
if(s.top - s.base ==s.stacksize){
printf("当前栈已满,入栈失败\n");
return ERROR;
}
*s.top = e;
s.top++; //top实际指向栈顶的上一位置
return OK;
}
出栈
Status popstack(sqstack &s,ElemType &e){
if(s.top == s.base){
printf("栈为空\n");
return ERROR;
}
--s.top;
e = *s.top;
printf("出栈元素是%d\n",e);
return OK;
}
具体实例
int main(){
sqstack s;
inistack(s);
stacklength(s);
isempty(s);
pushstack(s,1);
pushstack(s,2);
pushstack(s,3);
pushstack(s,4);
trlsqstack(s);
stacklength(s);
return 0;
}