栈的基本功能实现(C语言)

来源:互联网 发布:dc 大事件 知乎 编辑:程序博客网 时间:2024/05/01 15:10

1.栈的定义

栈(stack)是一种仅允许在一端插入和删除运算的线性表。栈中允许进行插入和删除的一端,称为栈顶(top)。栈顶的第一个元素称为栈顶元素。栈中不可以插入和删除的那一端,称为栈底(bottom)。在一个栈中插入新元素,即把新元素放到当前栈顶元素的上面,使其成为新的栈顶元素,这一操作称为进栈,入栈或压栈(push)。从一个栈中删除一个元素,把栈顶元素删除掉,使其下面的元素成为新的栈顶元素,称为出栈或退栈(pop)。

 注意:插入或删除都只能在栈顶一端进行。由于栈的插入或删除只能在栈顶一端进行,后进本栈的元素必定先出栈,所以栈又称为后进先出的线性表(last in first out)(简称LIFO结构)

2.代码实现

#include<stdio.h>

typedef int ElemType;
#define Maxsize 5 //栈最多存放的元素个数 
typedef struct {
ElemType data[Maxsize];
int top; 
}SqStack; 
//初始化栈 
void InitStack(SqStack &s){
s.top = -1;
}
//判断栈是否为空 
bool StackEmpty(SqStack &s){
if(s.top==-1){
return true;
}
else return false;
}
//进栈 
void Push(SqStack &s,ElemType e){
if(s.top!=Maxsize-1){
s.data[++s.top]=e;
}
else printf("Stack is full!\n");
}
//出栈 
void Pop(SqStack &s,ElemType &e){
if(StackEmpty(s))
{
printf("Empty\n");
}
else{
e=s.data[s.top--];
}
}
//获取栈顶元素
void GetTop(SqStack s,ElemType e){
if(StackEmpty(s))
{
printf("Empty\n");
}
else{
e=s.data[s.top];
}

//打印栈 
void PrintStack(SqStack s){
if(StackEmpty(s)){
printf("Empty\n");
}
else {
int i;
for(i=0;i<=s.top;i++){
printf("%d ",s.data[i]);
}
printf("\n");
}
}
int main(){
SqStack s;
int n=1,e;
printf("------------\n");
printf("--1.初始化--\n");
printf("--2.判断空--\n");
printf("--3.进栈----\n");
printf("--4.出栈----\n");
printf("--5.读取栈顶\n");
printf("--6.打印栈\n");
printf("--0.退出----\n");
while(n!=0){
printf("请选择功能:");
scanf("%d",&n);
switch(n){
case 1:
InitStack(s); break;
case 2:
if(StackEmpty(s)){
printf("Empty\n");
}
else printf("Not empty\n");
break;
case 3:
scanf("%d",&e);
Push(s,e);
break;
case 4:
Pop(s,e);
printf("%d\n",e);
break;
case 5:
GetTop(s,e);
printf("%d\n",e);
break;
case 6:
PrintStack(s); 
case 0: break;
default: printf("请输入正确的功能代码!\n"); 
}
}
printf("退出程序成功!"); 
}
原创粉丝点击