C语言实现栈的基本操作

#include <stdlib.h>
#include <stdio.h>
typedef int ElemType;
typedef struct Stack *link;
typedef struct Stack SNode;
struct Stack{
    ElemType data;
    struct Stack *next;
};
/**
 * 初始化栈
 */
link init(){
    link p;
    p=NULL;
    return p;
}
/** 入栈
 * @brief push
 * @param Head 栈顶指针
 * @param x
 * @return
 */
link push(link Head, ElemType x){
 link p;
 p=(link)malloc(sizeof(SNode));
 if(p==NULL)
 {
     printf("\n Memory Error\n");
     return Head;
 }
 p->data=x;
 p->next=Head;
 return p;
}
/**
 * @brief pop
 * @param Head 栈顶指针
 * @return
 */
link pop(link Head){
    link p; p=Head;
    if(p==NULL)
        printf("\nStack is Empty\n");
    else
    {
        p=p->next;
        free(Head);
    }
    return p;
}
/** 取栈顶元素
 * @brief getTop
 * @param Head 栈顶指针
 * @return
 */
ElemType getTop(link Head){
    if(Head==NULL)
    {
        printf("\nStack is Empty\n");
        return -1;
    }
    else {
        return Head->data;
    }
}
/** 判断栈是否为空
 * @brief empty
 * @param Head
 * @return
 */
int empty(link Head){
    if(Head==NULL)
        return -1;
    else
        return 0;
}
/** 显示栈元素
 * @brief display
 * @param Head
 */
void display(link Head){
       link p; p=Head;
       if(p==NULL)
           printf("\nStack is empty\n");
       else
           do
       {
         printf("%d\t",p->data);
         p=p->next;
       }while(p!=NULL);
       printf("\n");
}
/** 释放栈
 * @brief setNull
 * @param Head
 * @return
 */
link setNull(link Head){
      link p;p=Head;
      while(p!=NULL)
      {
          p=p->next;
          free(Head);
          Head=p;
      }
      return Head;
}
int main(){
    link head,p;
    head=init();
    p=push(head,1);
    p=push(p,2);
    p=push(p,3);
    p=push(p,4);
    p=push(p,5);
    p=push(p,6);
    display(p);
    p=pop(p);
    display(p);
    p=pop(p);
    display(p);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值