链式栈的操作

堆栈的链式表示操作
堆栈是一种限定在同一端进行插入和删除操作的线性结构
允许执行插入和删除的这一 端称为栈顶(top),另一端为栈底
堆栈有两种存储结构,顺序栈和链式栈
以下为链式栈的操作代码

#include <stdio.h>    
#include <stdlib.h>    
typedef int ElemType;    
//定义堆栈单链表     
typedef struct node    
{  
   ElemType elem;    
   struct node *next;    
}Node;    
typedef struct stack    
{    
    Node *top,*pRear;    
    //int top;     
}Stack;    
//初始化创建    
int Init(Stack *S)    
{    
    Node *p = (Node*)malloc(sizeof(Node));  
    S->top = p;  
    S->pRear = p;  
    p->next = NULL;   
    printf("堆栈创建成功!\n");  
    return 1;    
}  
int IsEmpty(Stack *S)  
{  
    return (S->top == S->pRear)   ;     
}   
   
//插入栈顶元素  
int Push(Stack *S,ElemType x)  
{  
    Node *p=(Node*)malloc(sizeof(Node));  
    p->elem = x;  
    p->next = S->top;  
    S->top = p;  
    printf("成功入栈!\n");  
}    
//删除栈顶元素  
int Pop(Stack *S)  
{  
    Node *p = S->top;  
    if(IsEmpty(S))  return 0;  
    S->top = p->next;  
    free(p);  
    printf("成功出栈!\n");  
    return 1;     
}  
//撤销堆栈   
void Destory(Stack *S)  
{  
    Node *p,*q;  
    p = S->top;  
    q = NULL;  
    while(p != S->pRear)  
    {  
        q = p->next;  
        free(p);  
        p = q;  
    }  
    printf("堆栈已撤销!\n");  
}    
//输出   
void Output(Stack *S)  
{  
    if(IsEmpty(S))  
    {  
        printf("栈为空!\n");  
    }  
    Node *p = S->top;  
    printf("输出栈:");  
    while(p != S->pRear)  
    {  
        printf("%d ",p->elem);  
        p =p->next;  
    }  
    printf("\n");  
}  
int main(void)  
{  
    Stack s;  
    Init(&s);  
    for(int i=0;i<5;i++)  
        Push(&s,i);  
    Output(&s);  
    Pop(&s);  
    Output(&s);  
    Destory(&s);  
    return 0;  
}   

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值