堆栈的初识

来源:互联网 发布:windows自带放大镜 编辑:程序博客网 时间:2024/06/05 23:41

堆栈(Stack)是一种简单和常用的数据结构,用户只能在指定的一端插入元素,并在同一端删除元素,因而元素的插入和删除具有后进先出LIFO(Last-In-First-Out)的特性。

基本知识

允许插入和删除元素的一端称为栈顶,而另外一端称为栈底。若栈中无元素,则称为空栈

常见的基本运算:

#include<stdio.h>#define Maxsize 50#define FALSE 0#define TRUE 1typedef int BOOL;typedef int T;typedef struct stack{    int Top,Maxstack;   //栈的最大允许长度为Maxstack,Top指向栈顶元素     T Elements[Maxsize];}Stack;//构造一个空栈,令栈顶指针Top=-1.栈的容量是Maxstack由用户通过参数maxsize指定,但是不能超过Maxsize void CreateStack(Stack *s,int maxsize){    s->Top=-1;    s->Maxstack=maxsize;} //若栈为空,则返回TRUE,否则返回FALSE BOOL IsEmpty(Stack s){    return s.Top<0;}//若堆栈已满,则返回TRUE,否则返回FALSEBOOL IsFull(Stack s){    return s.Top>=s.Maxstack-1;} //进栈,若堆栈已满,则输出OVERFLOW,否则值为x的新元素进栈,成为栈顶元素 void Push(Stack *s,T x){    if(IsFull(*s)) printf("OVERFLOW");    else      s->Elements[++s->Top]=x;}//出栈,若堆栈为空,则输出UNDERFLOW,否则栈顶元素从栈中删除 void Pop(Stack *s){    if(IsEmpty(*s))         printf("UNDERFLOW");     else       s->Top--; }//返回栈顶元素值,若堆栈为空,则输出UNDERFLOW,否则在参数x中返回栈顶元素值 void StackTop(Stack s,T *x){    if(IsEmpty(s)) printf("UNDERFLOW");    else      *x=s.Elements[s.Top];} //输入一个整数 T* InputElement(){    printf("请输入一个整数:\n");    int a;    scanf("%d",&a);    return &a;}//输出栈内元素 void PrintStack(Stack s){    int i;    if(IsEmpty(s)){      printf("UNDERFLOW\n");        return;           }     for(i=0;i<=s.Top;i++)      printf("%5d",s.Elements[i]);    printf("\n");}int main(){    Stack s;    T x;    T *a;    CreateStack(&s,10);   //构造一个容量为10的空整数栈     Push(&s,10);Push(&s,15);  //在栈中依次压入元素10和15     PrintStack(s);     //显示栈中元素     a=InputElement();   //调用InputElement函数接受键盘输入并奖其赋给x     x=*a;    Push(&s,x);  //将元素x进栈     PrintStack(s);     //显示栈中元素     StackTop(s,a);           printf("%d\n",*a);   //显示栈顶元素值     Pop(&s);Pop(&s);   //在栈中依次弹出两个元素     if(IsEmpty(s))      //判断此时栈是否为空栈        printf("Is empty!\n");    else       printf("Is not empty!\n");    PrintStack(s);   //显示栈中元素     return 0;}

还可以求栈的长度,清除一个栈,遍历一个栈等,需要后续补充。


0 0