第五周 项目2

来源:互联网 发布:js中==和===的区别 编辑:程序博客网 时间:2024/06/05 04:18
/*   烟台大学计算机学院      文件名称:yd.cpp      作者:李金朴     完成日期:2017年10月9日      问题描述:定义链栈存储结构,实现其基本运算    输入描述:无    输出描述:链栈的操作以及栈的操作后的元素输出,以及出栈的元素输出     */                 #include <stdio.h>    #include "ltsk.h"        int main()    {        ElemType e;        LinkStNode *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;    }                                        #include <stdio.h>    #include <malloc.h>    #include "ltsk.h"        void InitStack(LinkStNode *&s)//初始化    {        s=(LinkStNode *)malloc(sizeof(LinkStNode));//动态分配空间            s->next=NULL;    }            void DestroyStack(LinkStNode *&s)    {        LinkStNode *pre=s,*p=s->next;            while(p!=NULL)//循环释放空间        {            free(pre);                pre=p;                p=pre->next;        }            free(pre);        }        int  StackLength(LinkStNode *s)    {            int i=0;        LinkStNode *p;        p=s;        while(p!=NULL)//计算链栈元素个数        {            i++;//用i计数                p=p->next;        }            return i;    }            bool StackEmpty(LinkStNode *s)    {            return(s->next==NULL);            }            void Push(LinkStNode *&s,ElemType e)//入栈    {            LinkStNode *p;            p=(LinkStNode *)malloc(sizeof(LinkStNode));            p->data=e;//存放e            p->next=s->next;//将p节点插入作为首节点            s->next=p;                }            bool Pop(LinkStNode *&s,ElemType &e)    {        LinkStNode *p;            if(s->next==NULL)//栈空的情况        {            return false;        }            p=s->next;//提取p节点给e            e=p->data;            s->next=p->next;            free(p);            return true;        }            bool GetTop(LinkStNode *s,ElemType &e)    {        if(s->next==NULL)//栈空的情况                return false;            e=s->next->data;//将栈顶元素取出给e            return true;        }        void DispStack(LinkStNode *s)    {       LinkStNode *p=s->next;        while (p!=NULL)//输出链栈元素        {            printf("%c ",p->data);            p=p->next;        }        printf("\n");    }                                                                                                                          #include <stdio.h>            typedef char ElemType;        typedef struct linknode    {        ElemType data;            struct linknode *next;    }LinkStNode;            void InitStack(LinkStNode *&s);//初始化链栈        void DestroyStack(LinkStNode *&s);//销毁链栈        int  StackLength(LinkStNode *s);//计算长度        bool StackEmpty(LinkStNode *s);//判断是否为空        void Push(LinkStNode *&s,ElemType e);  //入栈        bool Pop(LinkStNode *&s,ElemType &e);  //出栈        bool GetTop(LinkStNode *s,ElemType &e);  //取栈顶元素        void DispStack(LinkStNode *s);  //输出栈中元素  

运行及结果:

学习心得:

学会了用链栈算法来对链栈进行操作。


原创粉丝点击