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

来源:互联网 发布:淘宝发论文被骗 编辑:程序博客网 时间:2024/06/13 22:53
/*烟台大学计算机学院  文件名称:lianzhan 作者:董玉祥 完成日期: 2017 10 15 问题描述:建立链栈算法库 */linkstnode.h#ifndef LINKSTNODE_H_INCLUDED#define LINKSTNODE_H_INCLUDEDtypedef char ElemType;typedef struct linknode{    ElemType data;    struct linknode *next;}LinkStNode;void InitStack(LinkStNode *&s);void DestroyStack(LinkStNode *&s);bool StackEmpty(LinkStNode *s);int StackLength(LinkStNode *s);void Push(LinkStNode *&s,ElemType e);bool Pop(LinkStNode *&s,ElemType &e);bool GetTop(LinkStNode *&s,ElemType &e);void DispStack(LinkStNode *&s);#endif // LINKSTNODE_H_INCLUDEDlinkstnode.cpp#include "stdio.h"#include "malloc.h"#include "linkstnode.h"void InitStack(LinkStNode *&s){    s=(LinkStNode *)malloc(sizeof(LinkStNode));    s->next=NULL;}void DestroyStack(LinkStNode *&s){    LinkStNode *pre,*p;    pre=s; p=s->next;    while(p!=NULL)    {        free(pre);        pre=p;        p=p->next;    }    free(pre);}bool StackEmpty(LinkStNode *s){    return (s->next==NULL);}int StackLength(LinkStNode *s){    int n=0;    while(s->next!=NULL)    {        n++;        s=s->next;    }    return n;}void Push(LinkStNode *&s,ElemType e){    LinkStNode *p;    p=(LinkStNode *)malloc(sizeof(LinkStNode));    p->data=e;    p->next=s->next;    s->next=p;}bool Pop(LinkStNode *&s,ElemType &e){    LinkStNode *p;    if(s->next==NULL)    {        return false;    }    p=s->next;    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;    return true;}void DispStack(LinkStNode *&s){    LinkStNode *p;    p=s->next;    while(p!=NULL)    {        printf("%c  ",p->data);      p=p->next;    }    printf("\n");}main.cpp#include <stdio.h>#include "linkstnode.h"using namespace std;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;}运行结果截图: