今天自学了下栈,简单实现C语言的栈的基本操作,学艺不精,请多指教。
栈
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
“只在一端操作,先入后出”
基本操作
顺序栈定义
typedef int StackElementType;
#define Stack_size 100
typedef struct
{
StackElementType elem[Stack_size];
int top;
}SeqStack;
和顺序表何其相似!几乎一模一样,所以线性表是基础,栈和队列只是操作方法罢了。
栈的初始化
void InitStack(SeqStack *S)
{
S->top=-1;
}
把栈顶“指针”赋为-1
入栈
void Push(SeqStack *S,StackElementType x)//入栈
{
if(S->top==Stack_size-1) return;
S->top++;
S->elem[S->top]=x;
return ;
}
出栈
void Pop(SeqStack *S,int *e)//出栈,用e返回值
{
if(S->top==-1)
{
printf("STACK EMPTY");
return ;
}
else{
*e=S->elem[S->top];
S->top--;
return ;
}
}
返回栈顶元素
void GetTop(SeqStack *S,int *e)//返回栈顶元素,这里可传S进去,因为不是对S修改而只读取
{
if(S->top==-1)
{
printf("STACK EMPTY");
return ;
}
else{
*e=S->elem[S->top];
return ;
}
}
几乎和出栈一模一样,只是不动栈顶指针罢了。
主函数
#include<stdio.h>
#include<stdlib.h>
typedef int StackElementType;
#define Stack_size 100
typedef struct
{
StackElementType elem[Stack_size];
int top;
}SeqStack;
void InitStack(SeqStack *S)
{
S->top=-1;
}
void Push(SeqStack *S,StackElementType x)//入栈
{
if(S->top==Stack_size-1) return;
S->top++;
S->elem[S->top]=x;
return ;
}
void Pop(SeqStack *S,int *e)//出栈,用e返回值
{
if(S->top==-1)
{
printf("STACK EMPTY");
return ;
}
else{
*e=S->elem[S->top];
S->top--;
return ;
}
}
void GetTop(SeqStack *S,int *e)//返回栈顶元素,这里可传S进去,因为不是对S修改而只读取
{
if(S->top==-1)
{
printf("STACK EMPTY");
return ;
}
else{
*e=S->elem[S->top];
return ;
}
}
int main()
{ int e;
SeqStack S;
InitStack(&S);
Push(&S,10);
Pop(&S,&e);
printf("%d",e);
GetTop(&S,&e);
return 0;
}
运行截图
今天顺序栈不难,请多指教