前言:
栈是一种受限的线性表,采用顺序存储的栈称为顺序栈,他利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,
同时附设一个指针(top)只是当前栈顶元素的位置。
- 栈空条件:S->top==-1;
- 栈满条件:S->top==MaxSize-1;
- 栈长:S->top+1;
代码:
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 50
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int top;
}SqStack;
bool InitStack(SqStack *S){
S->top = -1;
printf("顺序栈初始化成功\n");
return true;
}
bool StackEmpty(SqStack *S){
if(S->top==-1){
printf("顺序栈为空\n");
return true;
}
else{
printf("顺序栈不为空\n");
return false;
}
}
bool Push(SqStack *S,ElemType x){
if(S->top == MaxSize-1){
return false;
}
S->data[++S->top] = x;
return true;
}
bool Pop(SqStack *S,ElemType x){
if(S->top == -1){
printf("当前栈已经为空!\n");
return false;
}
x = S->data[S->top--];
printf("栈顶元素出栈\n");
return true;
}
ElemType GetTop(SqStack *S,ElemType x){
if(S->top==-1){
printf("顺序栈当前为空;\n");
return false;
}
x = S->data[S->top];
printf("当前栈顶元素为 %d\n",x);
return true;
}
bool CreateStack(SqStack *S,ElemType a[],int length){
int i,e;
printf("请输入栈:");
for(i=0;i<length;i++){
scanf("%d",&e);
a[i] = e;
Push(S,e);
}
return true;
}
void DestroyStack(SqStack *S){
free(S);
printf("顺序栈销毁\n");
}
void Display(SqStack *S,int length){
int i;
for(i=0;i<length;i++){
printf("%d ",&S->data[i]);
}
}
int main(){
SqStack *s;
int a[5],e;
s=(SqStack*)malloc(sizeof(SqStack));
InitStack(s);
CreateStack(s,a,5);
GetTop(s,e);
Pop(s,e);
StackEmpty(s);
DestroyStack(s);
return 0;
}