第五周项目2-建立链表栈算法库

来源:互联网 发布:2016年网络春晚节目单 编辑:程序博客网 时间:2024/06/04 19:19
<pre name="code" class="cpp">
/* copyright (t) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:臧新晓 *完成日期:2016年10月9日 *版本号:v1.0 *问题描述:定义链栈存储结构,实现其基本运算,并完成测试。 *输入描述:无 *程序输出:链栈基本运算的实现结果 */


//listack.htypedef char Elemtype;  typedef struct linknode  {      Elemtype data;      struct linknode *next;  } LiStack;    void InitStack(LiStack *&s);              //初始化栈  void DestroyStack(LiStack *&s);           //销毁栈  bool StackEmpty(LiStack *s);              //栈是否为空  int StackLength(LiStack *s);              //返回栈中元素个数——栈长度  void Push(LiStack *&s,Elemtype e);        //入栈  bool Pop(LiStack *&s,Elemtype &e);        //出栈  bool GetTop(LiStack *s,Elemtype &e);      //取栈顶数据元素  void DispStack(LiStack *s);               //输出栈  
<pre name="code" class="cpp">//listack.cpp#include <stdio.h>  #include <malloc.h>  #include "listack.h"  void InitStack(LiStack *&s)              //初始化栈  {      s=(LiStack *)malloc(sizeof(LiStack));      s->next=NULL;  }  void DestroyStack(LiStack *&s)           //销毁栈  {      LiStack *pre=s,*p=s->next;      while(p!=NULL)      {          free(pre);          pre=p;          p=p->next;      }      free(p);  }  bool StackEmpty(LiStack *s)              //栈是否为空  {      return (s->next==NULL);  }  int StackLength(LiStack *s)              //返回栈中元素个数——栈长度  {      int len=0;                           //初始长度置0      LiStack *p=s->next;      while(p!=NULL)      {          len++;          p=p->next;      }      return len;  }  void Push(LiStack *&s,Elemtype e)        //入栈  {      LiStack *p;      p=(LiStack *)malloc(sizeof(LiStack));      p->data=e;      p->next=s->next;      s->next=p;  }  bool Pop(LiStack *&s,Elemtype &e)        //出栈  {      LiStack *p;      if(s->next==NULL)          return false;      p=s->next;      e=p->data;      s->next=p->next;      printf("%c ",e);      free(p);      return true;  }  bool GetTop(LiStack *s,Elemtype &e)      //取栈顶数据元素  {      if(s->next==NULL);          return false;      e=s->next->data;      return true;  }  void DispStack(LiStack *s)               //输出栈  {      LiStack *p=s->next;                  //p指向s中第一个数据元素      while(p!=NULL)      {          printf("%c ",p->data);          p=p->next;      }      printf("\n");  }  


main.cpp#include <stdio.h>  #include "listack.h"  int main()  {      LiStack *s;      Elemtype e;      InitStack(s);                         //初始化栈s        if(StackEmpty(s))                     //判断s栈是否为空          printf("该栈是空栈\n");      else          printf("该栈不是空栈\n");        Push(s,'a');                          //a元素进栈      Push(s,'b');                          //b元素进栈      Push(s,'c');                          //c元素进栈      Push(s,'d');                          //d元素进栈      Push(s,'e');                          //e元素进栈        if(StackEmpty(s))                     //判断s栈是否为空          printf("该栈是空栈\n");      else          printf("该栈不是空栈\n");        printf("栈长度为:%d\n",StackLength(s));        //输出栈长度        printf("从栈顶元素到栈底元素的输出序列为:\n");      DispStack(s);                                   //输出从栈顶到栈底元素        if(StackEmpty(s))                               //判断s栈是否为空          printf("该栈是空栈\n");      else          printf("该栈不是空栈\n");        printf("出栈序列为:\n");                       //出栈,并输出出栈序列      while (!StackEmpty(s))                          //栈不为空时输出出栈元素          Pop(s,e);      printf("\n");        DestroyStack(s);                                //销毁(释放)栈      printf("此栈已被销毁!\n");        return 0;  }  



知识点总结:

        链栈的定义及基本运算

心得体会:

        需加强对单链表基本运算的巩固落实。



0 0
原创粉丝点击