一、栈的结构定义
#define MaxSize 100
#define DataType int
typedef struct {
DataType data[MaxSize];
int top;
}SeqStack, *PSeqStact;
二、基本操作的实现
//初始化栈
PSeqStact Init_Stack() {
PSeqStact S;
S = (PSeqStact)malloc(sizeof(SeqStack));
if (S) {
S->top = -1;
printf("初始化成功\n");
}
return S;
}
//判断栈空
int Empty_Stack(PSeqStact S) {
if (S->top == -1) {
return 1; //栈空
}
return 0; //栈不空
}
//入栈
int Push_Stack(PSeqStact S, DataType x) {
if (!S || S->top == MaxSize - 1) {
return 0; //失败
}
S->data[++S->top] = x;
return 1; //成功
}
//出栈,出栈元素由x带回
int Pop_Stack(PSeqStact S, DataType* x) {
if (S->top == -1) {
return 0; //失败
}
*x = S->data[S->top--];
return 1; //成功
}
//取栈顶元素
int GetTop_Stack(PSeqStact S, DataType* x) {
if (Empty_Stack(S)) {
return 0; //栈空
}
*x = S->data[S->top];
return 1;
}
//销毁栈
void Destroy_Stack(PSeqStact* S) {
free(*S);
*S = NULL;
printf("销毁成功\n");
return;
}
//显示栈中元素
void Show_Stack(PSeqStact S) {
printf("栈中元素有:\n");
for (int i = 0;i <= S->top; i++) {
printf("%d ", S->data[i]);
}
printf("\n");
}
三、测试代码
int main() {
int x = 0;
PSeqStact S;
S = Init_Stack();
for (int i = 0; i < 5; i++) {
if (Push_Stack(S, i))
printf("入栈成功,元素为:%d\n", i);
}
Show_Stack(S);
if (Pop_Stack(S, &x)) {
printf("出战成功,出栈元素为:%d\n", x);
}
Show_Stack(S);
if (GetTop_Stack(S, &x)) {
printf("栈顶元素为:%d\n", x);
}
Destroy_Stack(&S);
return 0;
}
四、测试结果