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

    xiaoxiao2023-03-28  6

    /*   * Copyright (c)2016,烟台大学计算机与控制工程学院   * All rights reserved.   * 文件名称:wu.cpp   * 作    者:武昊   * 完成日期:2016年9月29日   * 版 本 号:v1.0    *问题描述:定义链栈存储结构,实现其基本运算,并完成测试。   *输入描述:无   *程序输出:测试数据   */     lintack.h #include <stdio.h>   #include <malloc.h>   typedef char ElemType;   typedef struct linknode   {       ElemType data;              //数据域       struct linknode *next;      //指针域   } LiStack;                      //链栈类型定义      void InitStack(LiStack *&s);  //初始化栈   void DestroyStack(LiStack *&s);  //销毁栈   int StackLength(LiStack *s);  //返回栈长度   bool StackEmpty(LiStack *s);  //判断栈是否为空   void Push(LiStack *&s,ElemType e);  //入栈   bool Pop(LiStack *&s,ElemType &e);  //出栈   bool GetTop(LiStack *s,ElemType &e);  //取栈顶元素   void DispStack(LiStack *s);  //输出栈中元素   listack.cpp //链栈基本运算函数   #include "listack.h"         void InitStack(LiStack *&s)  //初始化栈   {       s=(LiStack *)malloc(sizeof(LiStack));       s->next=NULL;   }         void DestroyStack(LiStack *&s)  //销毁栈   {       LiStack *p=s->next;       while (p!=NULL)       {           free(s);           s=p;           p=p->next;       }       free(s);    //s指向尾结点,释放其空间   }         int StackLength(LiStack *s)  //返回栈长度   {       int i=0;       LiStack *p;       p=s->next;       while (p!=NULL)       {           i++;           p=p->next;       }       return(i);   }         bool StackEmpty(LiStack *s)  //判断栈是否为空   {       return(s->next==NULL);   }         void Push(LiStack *&s,ElemType e)  //入栈   {       LiStack *p;       p=(LiStack *)malloc(sizeof(LiStack));       p->data=e;              //新建元素e对应的节点*p       p->next=s->next;        //插入*p节点作为开始节点       s->next=p;   }         bool Pop(LiStack *&s,ElemType &e)  //出栈   {       LiStack *p;       if (s->next==NULL)      //栈空的情况           return false;       p=s->next;              //p指向开始节点       e=p->data;       s->next=p->next;        //删除*p节点       free(p);                //释放*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;       while (p!=NULL)       {           printf("%c ",p->data);           p=p->next;       }       printf("\n");   }   main.cpp #include "listack.h"         int main()   {       ElemType e;       LiStack *s;       printf("(1)初始化链栈s\n");       InitStack(s);       printf("(2)链栈为%s\n",(StackEmpty(s)?"空":"非空"));       printf("(3)依次进链栈元素a,b,c,d,e\n");       Push(s,'a');       Push(s,'b');       Push(s,'c');       Push(s,'d');       Push(s,'e');       printf("(4)链栈为%s\n",(StackEmpty(s)?"空":"非空"));       printf("(5)链栈长度:%d\n",StackLength(s));       printf("(6)从链栈顶到链栈底元素:");DispStack(s);       printf("(7)出链栈序列:");       while (!StackEmpty(s))       {   Pop(s,e);           printf("%c ",e);       }       printf("\n");       printf("(8)链栈为%s\n",(StackEmpty(s)?"空":"非空"));       printf("(9)释放链栈\n");       DestroyStack(s);       return 0;   }   运行结果: 知识点总结: 链表算法库是链栈算法库的基础,应用方法类似。
    转载请注明原文地址: https://ju.6miu.com/read-1209427.html
    最新回复(0)