C语言实现数据结构中的顺序栈

来源:互联网 发布:迅雷赚钱宝 移动网络 编辑:程序博客网 时间:2024/04/29 16:21

栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表,通常称插入,删除的一段为栈顶(Top),另一端为栈底(Botton)。当表中没有元素时称为空栈.

栈是后进先出(last in first out)的线性表 

下面是C语言实现数据结构中的顺序栈及基本算法

# include <stdio.h>
# include <stdlib.h>
/*定义顺序栈*/
# define StackSize 100     //假定预分配的栈空间最多为100个元素
typedef char DataType;     //假定栈元素的数据类型为字符
typedef struct
{
 DataType data[StackSize];
 int top;
}SeqStack;

/*错误信息输出函数*/
void Error(char *message)
{
 fprintf(stderr,"Error:%s/n",message);
 exit(1);
}

/*置空栈*/
void initStack(SeqStack *s)
{
 //将顺序栈置空
 s->top=-1;
}

/*判栈空*/
int stackEmpty(SeqStack *s)
{
 return s->top==-1;
}

/*判栈满*/
int stackFull(SeqStack *s)
{
 return s->top==StackSize-1;
}

/*进栈*/
void push(SeqStack *s,DataType x)
{
 if(stackFull(s))
 {
  Error("Stack overflow");
 }
 //栈顶指针加1后将x进栈
 s->data[++s->top]=x;
}

/*出栈*/
DataType pop(SeqStack *s)
{
 if(stackEmpty(s))
 {
  Error("Stack underflow");
 }
 //栈顶元素返回后将栈顶指针减一
 return s->data[s->top--];
}
/*取栈顶元素*/
DataType getStackTop(SeqStack *s)
{
 if(stackEmpty(s))
 {
  Error("Stack is empty");
 }
 return s->data[s->top];
}

void main()
{
 //定义栈
 SeqStack stack;
 SeqStack *s;
 char inData;
 char outData;
 s=&stack;
 //初始化栈
 initStack(s);
 //入栈
 printf("Please input data/n");
 while(inData!='/n')
 {
  scanf("%c",&inData);
  push(s,inData);
  printf("push %c to stack/n",inData);
 }
 //出栈
 while(s->top!=-1)
 {
  outData=pop(s);
  printf("Pop stack %c/n",outData);
 }
}

原创粉丝点击