栈是一种先入后出的数据结构
只有在栈顶的位置可以进行插入和删除操作
顺序栈是物理结构为顺序存储结构的栈
抽象数据类型如下:
ADT 栈(stack)
Data
同线性表.元素具有相同的类型,相邻元素具备前驱后继的关系
Operation
InitStack(*S):初始化操作,建立一个新栈
DestoryStack(*S):如果一个栈存在,销毁这个栈
ClearStack(*S):将栈清空
StackEmpty(S)
GetTop(S,*e)
Push(*S.e)
Pop(*S,*e)
StackLength(S)
endADT
#include <stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int ElemType;//栈中元素的类型
typedef int Status;
typedef struct {
ElemType data[MAXSIZE];
int top; //指向栈顶元素的位置
}SqStack;
Status InitStack(SqStack *S) {
S->top = -1;
return OK;
}
Status ClearStack(SqStack *S) {
S->top = -1;
return OK;
}
Status StackEmpty(SqStack S) {
if (S.top == -1) {
return TRUE;
} else {
return FALSE;
}
}
Status GetTop(SqStack S,ElemType *e) {
if (S.top == -1) {
return ERROR;
} else {
*e = S.data[S.top];
}
return OK;
}
Status Push(SqStack* S, ElemType e) {
if (S->top == MAXSIZE - 1) {
//栈满了
return ERROR;
}
S->top++;
S->data[S->top] = e;
return OK;
}
Status Pop(SqStack* S, ElemType* e) {
if (S->top == -1) {
//空栈
return ERROR;
}
*e = S->data[S->top];
S->top--;
return OK;
}
void PrintStack(SqStack S) {
if (S.top == -1) {
printf("Empty Stack,nothing to print\n");
}
for (int i = 0; i <= S.top; i++) {
printf("Index %d = %d\n",i,S.data[i]);
}
}
int main()
{
SqStack myStack;
InitStack(&myStack);
Push(&myStack, 1);
Push(&myStack, 2);
Push(&myStack, 3);
Push(&myStack, 4);
Push(&myStack, 5);
PrintStack(myStack);
int num;
Pop(&myStack, &num);
printf("Pop num = %d",num);
return 0;
}