链栈及运算实现

利用链式存储结构实现的栈称作链栈(link stack).链栈中的每一个数据元素用一个结点表示,其数据形式与单链表完全相同。链栈从本质上讲就是单链表,无非是限制了插入和删除运算只能在链头进行,所有可以说链栈是限制插入和删除运算只能在链头进行的单链表。由于在链头运算,所以不用像单链表那样附加头结点,更方便运算。

链栈的类型定义如下:

typedef struct node
{
    elemtype data;
    struct node *next;
}linkstack;
linkstack *top;//栈顶指针,即链头指针

链栈的基本运算实现算法如下:

1.置空栈算法

void setnull(linkstack *top)
{
    top=NULL;//只要置top为空即可
}

2.判栈空算法

int empty(linkstack *top)//栈空返回1否则返回0
{
    if(top==NULL)
        return 1;
    else 
        return 0;
}

3.进栈算法

void push(linkstack *top,elemtype x)//链栈不会发生上溢
{
    linkstack *p;
    p=(linkstack *)malloc(sizeof(linkstack));//生成新结点并将其地址送p
    p->data=x;//填入元素x
    p->next=top;//插入栈顶
    top=p;//修改栈顶指针值
}

4.出栈算法

elemtype pop(linkstack *top)
{
    linkstack *p;
    elempty x;
    if(top==NULL)
        return NULL;//栈为空时无元素弹出
    else
    {
        p=top;//保存栈顶指针于p中
        x=top->data;//存栈顶元素于x中
        top=top->next;//修改栈顶指针
        free(p);//释放弹出元素结点空间
        return x;//返回弹出元素的值
    }
}

5.读栈顶元素算法

elemtype gettop(linkstack *top)
{
    if(top==NULL)
        return NULL;
    else 
        return top->data;
}


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值