//用顺序栈实现栈的基本操作
#include "stdio.h"
#include "malloc.h"
#define Maxsize 50
typedef int datatype;
typedef struct{
datatype stack[Maxsize];
int top;
}SeqStack;
SeqStack *InitStack(){
SeqStack *S;
S=(SeqStack *)malloc(sizeof(SeqStack));
printf("初使化顺序栈!/n");
if(!S) //判断栈是否初使化成功
{
printf("空间不足");
return NULL;
}else
{
S->top=-1;
return S;
}
}
datatype GetTop(SeqStack *s){
if(s->top>0)
{
//s->top--;
return s->stack[s->top];
}else{
printf("这是一个空栈");
return 0;
}
}
SeqStack *Push(SeqStack *s,datatype data){
if(s->top>=Maxsize-1){
printf("这个栈是空的");
return NULL;
}else{
s->top++;
s->stack[s->top]=data;
return s;
}
}
datatype Pop(SeqStack *s){
if(s->top>-1){
s->top--;
return s->stack[s->top+1];
}else{
printf("这个栈中已经没有数据了!");
return 0;
}
}
void DisplayStack(SeqStack *s){ //输出这个栈
if(s->top==-1){
printf("这是一个空栈");
}else{
while(s->top>-1){
printf("%d->",s->stack[s->top]);
s->top--;
}
}
}
int main(){
int a[6]={1,2,3,4,5,6},i;
SeqStack *p;
p=InitStack();//初使化顺序栈
for(i=0;i<6;i++){
Push(p,a[i]);//向栈中加入数据
}
printf("输出这个栈的值:");
DisplayStack(p);
printf("/n/n/n");
printf("因为上面的输出程序把栈的TOP变为了0,所以重新向这个栈中输入值/n");
for(i=0;i<6;i++){
Push(p,a[i]);
}
printf("输出这个栈的栈顶是:%d/n",GetTop(p));
printf("向这个栈中加入一个数据100/n");
Push(p,100);
printf("输出加入100后这个栈的栈顶是:%d/n",GetTop(p));
printf("输出加入100后这个栈的值:");
DisplayStack(p);
printf("/n/n/n");
printf("因为上面的输出程序把栈的TOP变为了0,所以重新向这个栈中输入值/n");
for(i=0;i<6;i++){
Push(p,a[i]);
}
printf("栈中出来两个数据后,输出这个栈");
Pop(p);
Pop(p);
DisplayStack(p);
printf("/n");
}