学习笔记
一、基本操作
1.初始化
//顺序栈的存储结构
#define MAXSIZE 100
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
//初始化
void InitStack(SqStack &S){
S.base = (int *)malloc(MAXSIZE *sizeof(int));
S.top = S.base;
S.stacksize = MAXSIZE;
}
2.入栈
//入栈
bool PushStack(SqStack &S,int e){
if (S.top - S.base == S.stacksize) return false; //栈满
*S.top++ = e;
return true;
}
3.出栈
//出栈
bool PopStack(SqStack &S){
int e;
if (S.base == S.top) return false;
e = *--S.top;
return true;
}
4.取栈顶元素
//取栈顶元素
int GetTop(SqStack &S){
if (S.base != S.top) return *(S.top-1);
}
5.栈的长度
//栈的长度
int StackLength(SqStack S){
return S.top-S.base;
}
二、尝试代码
#include<stdio.h>
#include<stdlib.h>
//顺序栈的存储结构
#define MAXSIZE 100
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
//初始化
void InitStack(SqStack &S){
S.base = (int *)malloc(MAXSIZE *sizeof(int));
S.top = S.base;
S.stacksize = MAXSIZE;
}
//入栈
bool PushStack(SqStack &S,int e){
if (S.top - S.base == S.stacksize) return false; //栈满
*S.top++ = e;
return true;
}
//出栈
bool PopStack(SqStack &S){
int e;
if (S.base == S.top) return false;
e = *--S.top;
printf("此时出栈的为: %d\n",e);
return true;
}
//取栈顶元素
int GetTop(SqStack &S){
if (S.base != S.top) return *(S.top-1);
}
//栈的长度
int StackLength(SqStack S){
return S.top-S.base;
}
int main(){
SqStack S;
InitStack(S);
int x;
scanf("%d",&x);
while(x != 9999){
printf("此时入栈的为: %d\n",x);
PushStack(S,x);
scanf("%d",&x);
}
int va_top;
va_top = GetTop(S);
printf("此时的栈顶元素为: %d\n",va_top);
int len;
len = StackLength(S);
printf("此时的栈的长度为: %d\n",len);
while(S.base != S.top) PopStack(S);
len = StackLength(S);
printf("此时的栈的长度为: %d\n",len);
return 0;
}