基于链表实现栈

我们在链表的基础上实现栈,主要有以下操作

入栈
- 出栈
- 取栈顶元素
- 初始化
- 销毁**
相关的代码实现的过程如下
1、数据结构

  6  typedef  char LinkStackType;
  7  typedef  struct LinkNode{
  8      LinkStackType data;
  9      struct LinkNode* next;//只有一个指针指向下一个元素,单向链表
 10      }LinkNode;
 11 typedef struct LinkStack{
 12     LinkNode head;
 13 }LinkStack;

2、初始化

 void LinkStackInit(LinkStack* stack){
  4       if(stack==NULL){
  5           return;
  6         }
  7      stack->head.data='\0';
  8      stack->head.next=NULL;
  9   }
 10 

3、销毁

void LinkStackDestroy(LinkNode* stack)//销毁栈
 12 {
 13     free(stack);
 14     stack=NULL;
 15 }
 16 

4、打印函数

  void LinkStackPrint(LinkStack* stack,const char* msg)
 18 {
 19     printf("[%s]\n",msg);
 20     LinkNode* cur=stack->head.next;
 21     for(;cur!=NULL;cur=cur->next){
 22         printf("[%c|%p]",cur->data,cur);
 23     }
 24     printf("\n");
 25 }

5、创造新的结点

 LinkNode* CreateNode(LinkStackType value)
 27 {
 28     LinkNode* newnode=(LinkNode*)malloc(sizeof(LinkNode));
 29             newnode->data=value;
 30             newnode->next=NULL;
 31             return newnode;
 32 }

7、入栈操作

void LinkStackPush(LinkStack* stack,LinkStackType value)//入栈
 35 {
 36     if (stack==NULL){
 37         return;
 38     }
 39     LinkNode* newnode=CreateNode(value);
 40     newnode->next=stack->head.next;
 41     stack->head.next=newnode;
 42 
 43 }

8、出栈操作

void LinkStackPop(LinkStack* stack)
 45 { 
 46     if(stack==NULL){
 47         return;
 48     }
 49    LinkNode* to_delete=stack->head.next;
 50    stack->head.next=to_delete->next;
 51    LinkStackDestroy(to_delete);
 52 }
 53 

9、取栈顶元素

int  LinkStackTop(LinkStack* stack,LinkStackType* value)//取栈顶元素
 55 {
 56     if(stack==NULL || value==NULL){
 57         return 0;
 58     }
 59     if(stack->head.next=='\0'){
 60         return 0;
 61     }
 62     *value=stack->head.next->data;
 63     return  *value;
 64 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值