【项目2 - 建立链栈算法库】

代码:
<pre name="code" class="cpp">//main函数
#include <iostream>

#include "LiStack.h"
using namespace std;

int main()
{
    int a=1,b=2,c=3,d=4,e=5;


    LiStack *s;
    printf("初始化栈\n");
    InitStack(s);
    printf("栈为:%s\n",(StackEmpty(s)?"空":"非空"));
    printf("依次进栈元素为:%d %d %d %d %d\n",a,b,c,d,e);
    Push(s,a);
    Push(s,b);
    Push(s,c);
    Push(s,d);
    Push(s,e);
    printf("栈为:%s\n",(StackEmpty(s)?"空":"非空"));
    printf("链栈长度为:%d\n",StackLength(s));
    printf("从栈顶到栈底元素:\n");
    DispStack(s);
    printf("出栈序列:\n");
    while(!StackEmpty(s))
    {
        Pop(s,e);
        printf("%d\n",e);
    }
    printf("栈为:%s\n",(StackEmpty(s)?"空":"非空"));
    printf("释放链栈\n");
    DestroyStack(s);
    return 0;
}
//头文件
#ifndef LISTACK_H_INCLUDED
#define LISTACK_H_INCLUDED
#include <iostream>
#include <stdio.h>
#include <malloc.h>
typedef int ElemType ;
typedef struct linknode
{
    ElemType data;
    struct linknode *next;
}LiStack;
void InitStack(LiStack *&s);    //初始化栈
void DestroyStack(LiStack *&s);  //销毁栈
bool StackEmpty(LiStack *s);     //栈是否为空
int StackLength(LiStack *s);  //返回栈中元素个数——栈长度
void Push(LiStack *&s,ElemType e); //入栈
bool Pop(LiStack *&s,ElemType &e); //出栈
bool GetTop(LiStack *s,ElemType &e); //取栈顶数据元素
void DispStack(LiStack *s);  //输出栈



#endif // LISTACK_H_INCLUDED

//源文件
 
<pre name="code" class="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);
}
bool StackEmpty(LiStack *s)     //栈是否为空
{
    return(s->next==NULL);
}
int StackLength(LiStack *s)  //返回栈中元素个数——栈长度
{
    int i=0;
    LiStack *p=s->next;
    while(p!=NULL)
    {
        i++;
        p=p->next;
    }
    return i;
}
void Push(LiStack *&s,ElemType e) //入栈
{
    LiStack *p;
    p=(LiStack *)malloc(sizeof(LiStack));
    p->data=e;
    p->next=s->next;
    s->next=p;
}
bool Pop(LiStack *&s,ElemType &e) //出栈
{
    LiStack *p;
    if(s->next==NULL)
        return false;
    p=s->next;
    e=p->data;
    s->next=p->next;
    free(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;
    if(s->next==NULL)
        printf("栈为空\n");
    while(p!=NULL)
    {

        printf("%d\n",p->data);
        p=p->next;

    }
}

运行结果:
 
<img src="data:image/png;base64,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值