第五周 项目1 建立顺序栈算法库

来源:互联网 发布:ngrok nat123 知乎 编辑:程序博客网 时间:2024/06/05 15:52
/*问题及代码  *Copyright(c)2016,烟台大学计算机学院  *All right reserved.  *文件名称:00.cpp  *作者:白晓娟*完成日期;2016年9月30日  *版本号;v1.0  *问题描述: 要求:   1、头文件sqstack.h中定义数据结构并声明用于完成基本运算的函数。对应基本运算的函数包括:   void InitStack(SqStack *&s);    //初始化栈  void DestroyStack(SqStack *&s);  //销毁栈  bool StackEmpty(SqStack *s);     //栈是否为空  int StackLength(SqStack *s);  //返回栈中元素个数——栈长度  bool Push(SqStack *&s,ElemType e); //入栈  bool Pop(SqStack *&s,ElemType &e); //出栈  bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素  void DispStack(SqStack *s);  //输出栈1  2、在sqstack.cpp中实现这些函数   3、在main函数中完成测试,包括如下内容:   (1)初始化栈s   (2)判断s栈是否为空   (3)依次进栈元素a,b,c,d,e   (4)判断s栈是否为空   (5)输出栈长度   (6)输出从栈顶到栈底元素   (7)出栈,并输出出栈序列   (8)判断s栈是否为空   (9)释放栈   *输入描述:测试栈  *程序输出:测试结果  */   


//list.h 代码  #define MaxSize 100    typedef char ElemType;    typedef struct    {        ElemType data[MaxSize];        int top;                //栈指针    } SqStack;                  //顺序栈类型定义        void InitStack(SqStack *&s);    //初始化栈    void DestroyStack(SqStack *&s);  //销毁栈    bool StackEmpty(SqStack *s);     //栈是否为空    int StackLength(SqStack *s);  //返回栈中元素个数——栈长度    bool Push(SqStack *&s,ElemType e); //入栈    bool Pop(SqStack *&s,ElemType &e); //出栈    bool GetTop(SqStack *s,ElemType &e); //取栈顶数据元素    void DispStack(SqStack *s);  //输出栈  

// main.cpp 代码  #include <stdio.h>    #include <malloc.h>    #include "list.h"  int main()    {        ElemType e;        SqStack *s;       printf("(1)初始化栈s\n");        InitStack(s);        printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空"));        printf("(3)依次进栈元素l,i,x,i,a\n");                Push(s,'l');        Push(s,'i');       Push(s,'x');        Push(s,'i');        Push(s,'a');        printf("(4)栈为%s\n",(StackEmpty(s)?"空":"非空"));        printf("(5)栈长度:%d\n",StackLength(s));        printf("(6)从栈顶到栈底元素:");DispStack(s);        while (!StackEmpty(s))       {            Pop(s,e);            printf("%c ",e);        }       printf("\n");        printf("(8)栈为%s\n",(StackEmpty(s)?"空":"非空"));        printf("(9)释放栈\n");        return 0;    }    

// list.cpp 代码    #include <stdio.h>    #include <malloc.h>    #include "list.h"     void InitStack(SqStack *&s)    {        s=(SqStack *)malloc(sizeof(SqStack));       s->top=-1;    }    void DestroyStack(SqStack *&s)    {        free(s);    }    int StackLength(SqStack *s)  //返回栈中元素个数——栈长度    {        return(s->top+1);    }    bool StackEmpty(SqStack *s)    {        return(s->top==-1);    }    bool Push(SqStack *&s,ElemType e)    {        if (s->top==MaxSize-1)    //栈满的情况,即栈上溢出            return false;         s->top++;       s->data[s->top]=e;       return true;    }    bool Pop(SqStack *&s,ElemType &e)    {        if (s->top==-1)     //栈为空的情况,即栈下溢出            return false;        e=s->data[s->top];        s->top--;        return true;    }    bool GetTop(SqStack *s,ElemType &e)    {        if (s->top==-1)         //栈为空的情况,即栈下溢出          return false;        e=s->data[s->top];        return true;    }      void DispStack(SqStack *s)  //输出栈    {        int i;        for (i=s->top;i>=0;i--)           printf("%c ",s->data[i]);       printf("\n");    }    

结果:


知识点总结:
顺序栈的存储结构及基本算法
学习心得:
无论是顺序栈还是什么栈它的所有的运算都是对栈顶操作,并且是先进后出的理念。 







0 0
原创粉丝点击