模拟栈-C描述
#include<stdlib.h>
#include<stdio.h>
#define STATUS_OK 1
#define STATUS_ERROR 0
#define TRUE 1
#define FALSE 0
#define MAX_SIZE 20
typedef int Status;
typedef int SElementType;//栈元素
typedef struct {
SElementType data[MAX_SIZE];
int top;
}SqStack;
Status visit(SElementType d) { //显示元素
printf("%d", d); return STATUS_OK;
}
Status initStack(SqStack *S) {
S->top = -1; return STATUS_OK;
}
Status clearStack(SqStack *S) {
S->top = -1; return STATUS_OK;
}
Status isEmpty(SqStack *S) {
return S->top == -1 ? TRUE : FALSE;
}
int getLength(SqStack S) {
return (S.top + 1);
}
Status getTop(SqStack *S, SElementType *e) {
if (isEmpty(S))
{
return STATUS_ERROR;}
*e = S->data[S->top];
return STATUS_OK;
}
Status pop(SqStack * S, SElementType * e) {//出栈
if (isEmpty(S)) return STATUS_ERROR;
*e = S->data[S->top];
S->top--;
return STATUS_OK;
}
Status push(SqStack *S, SElementType e) {//压栈
if (S->top>MAX_SIZE - 1)
return STATUS_ERROR;
S->top++;
S->data[S->top] = e;
return STATUS_OK;
}
Status traverse(SqStack S) { //展示栈
int i = 0;
while (i <= S.top)
{
visit(S.data[i++]);
}
printf("\n");
return STATUS_OK;
}
void main() {
SqStack stack;
int j = 0;
int e = 0;
if (initStack(&stack)) {
for (int i = 0; i < 10; i++)
{
push(&stack, i); //压栈
}
}
printf("栈中元素依次为:");
traverse(stack);
pop(&stack, &e);
printf("\n弹出栈顶元素:%d", e);
getTop(&stack, &e);
printf("\n栈顶元素是:%d",e);
printf(isEmpty(&stack)?"\n栈是空栈":"\n栈不是空栈");
printf("\n栈的长度是:%d", getLength(stack));
clearStack(&stack);
printf("\n栈的长度是:%d", getLength(stack));
getchar();
}