数据结构—栈(链式存储)

分为:顺序存储和链式存储

链式存储:

struct.h:

#ifndef _STRUCT_H
#define _STRUCT_H

#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>

typedef struct infonode
{
        int a;
        struct infonode *next;
}info, *pinfo;


void init(pinfo *p);
void add(pinfo *p, int num);
int out(pinfo *p);
bool is_empty(pinfo p);
void show(pinfo p);


#endif

func.c:

 #include"struct.h"
 
 
 //初始化
 void init(pinfo *p)
 {
 #if 0
         (*p) = NULL;
 #endif
         *p = (pinfo)malloc(sizeof(info));
         if(*p == NULL)
         {
                 perror("malloc failed in init function");
                 exit(1);
         }
 
         (*p)->next = NULL;
 
 }
 
 //入栈
 void add(pinfo *p, int num)
 {
         pinfo new;
         new = (pinfo)malloc(sizeof(info));
         if(new == NULL)
         {
                 perror("malloc failed");
                 return ;
         }
 
         new->a = num;
         new->next = *p;
         *p = new;
 
 }
 
 //出栈
 int out(pinfo *p)
 {
         int data;
         pinfo temp;
 
         if(is_empty((*p)))
         {
                 printf("not any data\n");
                 return 0;
         }
 
         data = (*p)->a;
         temp = (*p);
         (*p) = (*p)->next;
 
         free(temp);
 
         return data;
 }
 
 
 //判空
 bool is_empty(pinfo p)
 {
 #if 0
         if(p == NULL)
 #endif
         if(p->next == NULL)
                 return true;
         else
                 return false;
 }
 
 //遍历
 void show(pinfo p)
 {
 #if 0
         while(p != NULL)
 #endif
         while(p->next != NULL)
         {
                 printf("%d ", p->a);
                 p = p->next;
         }
         printf("\n");
 }

main.c:

 #include"struct.h"
 
 
 int main(void)
 {
         int a[10] = {234,234,2423,2,3423,1213};
         int i;
 
         pinfo top;
         init(&top);
 
         for(i = 0; i < 10; i++)
         {
                 add(&top, a[i]);
         }
 
         printf("first show:");
         show(top);
 
         printf("after first out: ");
         out(&top);
         show(top);
 
         return 0;
 }
                                                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值