我与数据结构有个约会,带你领略不一样的数据结构!
/*
问题分析:栈和线性表的关联?
栈(包括队列)是线性表的重要应用,所以,他们在逻辑结构上,和线性表是一样的,有唯一后继和前驱;栈但是,栈是一种受限制的线性表
,他的插入和删除操作只能在一端(先进后出)。
*/
#include <stdio.h>
#include <stdlib.h>
#define Maxsize 100
typedef int ElemType;
typedef struct Sqstack{
ElemType data[Maxsize];
int top;
};
/*
问题分析:
1.为什么初始化栈顶为-1?
这是我们自己设置的,但是由于栈是依托数组进行操作,一般情况,我们喜欢把第一个元素的索引记成0,所以
我们栈顶初始化一般有一下两种:
A.top = -1;这时我们的操作:进栈时,先top+1,在进元素(一般开始元素的索引为0)
,出栈时,先弹出元素,再top-1。
B.top = 0;这时我们的操作:进栈时,先进元素,再top+1;出栈时,先top-1;再弹出
*/
//初始化
void InitStack(Sqstack &L){
L.top = -1;
}
//进栈
bool Push(Sqstack &L,int e){
if(L.top == Maxsize-1){ //此时,栈为满
return false;
}
L.top++;
L.data[L.top] = e;
return true;
}
//出栈
bool Pop(Sqstack &L,int &e){
if(L.top == -1){ //此时,栈空
return false;
}
e = L.data[L.top];
printf("%d->",e); //查看删除元素
L.top--;
return true;
}
//输出(顺序输出)
void PrintStack(Sqstack L){
for(int i=0;i<=L.top;i++){
printf("%d->",L.data[i]);
}
}
int main(){
int x,e;
Sqstack l;
InitStack(l);
for(int j=0;j<5;j++){ //入栈
scanf("%d",&x);
Push(l,x);
}
//PrintStack(l);
printf("\n");
for(int k=0;k<5;k++){
Pop(l,e);
}
//PrintStack(l);
system("pause");
}