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

来源:互联网 发布:java获取post请求参数 编辑:程序博客网 时间:2024/06/18 09:49
/*    Copyright (c)2017,烟台大学计算机与控制工程学院          All rights reserved.            文件名称:15.cpp            作    者:尚文哲           完成日期:2017年10月11日                                问题描述:定义链栈存储结构,实现其基本运算,并完成测试。       输入描述:若干数据。      程序输出:各个步骤的文字叙述及其数据的输出。  */                 //(1)头文件:            #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);  //输出栈中元素                    //(2)源文件:                        #include"head.h"        void InitStack(LiStack *&s)        {            s=(LiStack *)malloc(sizeof(LiStack));            s->next=NULL;        }                        void DestroyStack(LiStack *&s)        {            free(s);        }        int StackLength(LiStack *s)        {            int i=0;            s=s->next;            while(s!=NULL)            {                i++;                s=s->next;            }            return i;        }        bool StackEmpty(LiStack *s)        {            if(s->next==NULL)            {                return true;            }            else return false;        }        void Push(LiStack *&s,ElemType e)        {            LiStack *l;            l=(LiStack *)malloc(sizeof(LiStack));            l->data=e;            l->next=s->next;            s->next=l;        }        bool Pop(LiStack *&s,ElemType &e)        {            LiStack *l;            l=s;            if(l->next==NULL)            {                return false;            }            l=s->next;            e=l->data;            s->next=l->next;            free(l);            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 *l;            l=s;            l=l->next;            while(l!=NULL)            {                printf("%c",l->data);                l=l->next;            }            printf("\n");                        }              //(3)main函数:            #include"head.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;        }    


运行结果:

原创粉丝点击