数据结构----链栈及其基本操作

数据结构----链栈

链栈与顺序栈的区别就是链栈可以让储存的空间是无限的,不会有溢出的风险,可以更加合理的利用计算机存储内存。`
以下是代码实现:
在这里插入图片描述
创建·压栈·出栈


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

//首先先定义一个结构体,并用typedef来定义名称
typedef struct chu zhu;
 struct chu{
    int sum;
    zhu *next;
};

//在单独定义一个头指针,也用typedef定义简介的名称,
//这样做可以更加明显分辨头指针,当然也可以不用这样做
typedef struct lin str;
struct lin{
    zhu *pnext;
};

// 此函数是创建链栈的
str * chuang()
{
    struct lin *ak;//先为头指针申请内存
    ak=(str *)malloc(sizeof(str));
    if(!ak)  //
        printf("无存储其他\n");//就是该指针的内存指向处无内存占用
    else{
        ak->pnext=NULL;//否则指向NULL
    }
    printf("创建成功");
    return ak; //然后创建成功后返回创建好的头指针
}

//接下来这个函数为链栈的值的压入
void push(str * ak,int a)
{
    zhu *p;
    p=(zhu *)malloc(sizeof(zhu));
    if(!p)
        printf("无法分配内存");//如果内存内不为空就无法存储
    else                 //反之,将数值压入,并改变头指针的指向
    {
        p->sum=a;
        p->next=ak->pnext;
        ak->pnext=p;
    }
}


//这个函数为出栈,就是取出栈中的值,并且删除所占用内存
//此处我取出栈中所有的值为例
void bn(str * ak)
{
    zhu *p;
    p=NULL;
    p=ak->pnext;
   while(p)
   {
       printf("%d\n",p->sum);
       ak->pnext=p->next;
       free(p);   //每次取出栈顶元素后,就可以删除栈顶所用的内存
       p=ak->pnext;
      
   }
   free(ak);//最后一步需要再删除头指针
}


int main()
{
    str * dd;
    dd=chuang();  //创建链栈
    int n;
    scanf("%d",&n);  //表示为链栈元素的个数
    for(int i=1;i<=n;i++)
    {
        int a;
        scanf("%d",&a); //输入链栈中所存储的值
        push(dd,a);    //把输入的值压入链栈
    }
    printf("输出链栈元素\n");
    bn(dd);     //出栈并输出栈中的元素
    system("pause");
    return 0;
}

如有错误,还请指出,谢谢。
在这里插入图片描述


后续还会有更多的相关数据结构的学习有关的文章,请关注后续的文章。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值