栈的基本操作包括 创建,入栈,出栈,得到栈顶元素
很简单,直接上代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Init_Stack_size 10
#define STACKINCREMENT 10
typedef int SElemtype ;
typedef struct {
SElemtype *base;
SElemtype *top;
int stacksize;
}SqStack;
void InitStack(SqStack &s){
s.base = (SElemtype*)malloc(Init_Stack_size*sizeof(SElemtype));
if(!s.base) {
printf("栈初始化失败!\n");
return;
}
s.top = s.base;
s.stacksize = Init_Stack_size;
printf("栈初始化完成!\n");
}
void push(SqStack &s,SElemtype e){
if(s.top-s.base>=s.stacksize) {
s.base = (SElemtype*)realloc(s.base,(Init_Stack_size+STACKINCREMENT)*sizeof(SElemtype));
if(!s.base) {
printf("增加内存上失败!\n");
return;
}
s.top = s.base + s.stacksize;
s.stacksize +=STACKINCREMENT;
}
*s.top = e;
s.top++;
printf("元素%d入栈成功!\n",e);
}
void Pop(SqStack &s,SElemtype &e){//用e来存储出栈的元素
if(s.base==s.top) {
printf("栈空!\n");
return;
}
s.top--;
e = *s.top;
printf("出栈成功!\n");
}
void GetTop(SqStack &s,SElemtype &e){
if(s.base==s.top) {
printf("栈空错误!\n");
return;
}
e = *(s.top-1);
}
int main(){
SqStack S;
int e;
InitStack(S);
int c;
printf("1 入栈,2 出栈,3 得到栈顶元素,按其他退出\n");
while(1){
printf("请输入要执行的操作:\n");
scanf("%d",&c);
if(c==1) {
printf("请输入要入栈的元素:\n");
scanf("%d",&e);
push(S,e);
}
else if(c==2) {
Pop(S,e);
}
else if(c==3) {
GetTop(S,e);
printf("栈顶元素为 %d\n",e);
}
else break;
}
}
测试结果: