#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERLOW -1
#define MAXSIZE 100
typedef int ElemType;
typedef struct{
ElemType data[MAXSIZE];
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S){
S.base=(int*)malloc(MAXSIZE*sizeof(int));
if(!S.base)exit(OVERLOW);
S.top=S.base;
S.stacksize=MAXSIZE;
return OK;
}
int Push(SqStack &S, ElemType e) {
if (S.top - S.base >= S.stacksize) {
printf("栈已满,无法入栈\n");
return ERROR;
}
*S.top = e;
S.top++;
return OK;
}
int Pop(SqStack &S, ElemType e) {
if (S.top ==S.base) {
printf("栈空,无法出栈\n");
return ERROR;
}
--S.top;
e = *S.top;
return OK;
}
ElemType GetTop(SqStack S, ElemType &e)
{//出栈返回栈顶元素
if(S.top==S.base) //栈空
return ERROR;
e=*S.top--;
return e;
}
int main(){
SqStack S;
ElemType e;
S.base = S.data;
S.top = S.base;
S.stacksize = MAXSIZE;
Push(S, 1);
Push(S, 2);
Push(S, 3);
printf("入栈后元素为:");
for(int i=0;i<S.top-S.base;i++){
printf("%d",S.data[i]);
}
printf("\n");
printf("出栈后元素为:");
// for(int i=S.top-S.base-1;i>0;i--){
// printf("%d",S.data[i]);
// }
// printf("\n");
ElemType e1;
while (Pop(S, e1) == OK) {
printf("%d", e1);
}
printf("\n");
printf("栈顶元素为:");
ElemType topElement;
GetTop(S,topElement);
printf("%d",topElement);
return 0;
}
顺序栈的基本操作
于 2024-04-08 23:06:49 首次发布