您的位置:首页 > 其它

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

2015-10-09 08:37 260 查看
/*     
Copyright(c)2015,烟台大学计算机与控制工程学院     

All right reserved.     
文件名称:main.cpp     

作者:王超    

完成日期;2015年10月9日     

版本号;v1.0       

问题描述:定义链栈算法库,实现基本运算。 
 */   

#include <stdio.h>

#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;

}

#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 *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");

}

#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);  //输出栈中元素

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: