简要

链栈就是利用单链表作为栈的存储结构,单链表的第一个节点为栈顶,而最后一个节点为栈底,链栈既可以带头节点也可以不带头节点。

实现过程

实现代码

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
typedef int ElemType;
typedef struct student
{ElemType data;struct student*next;
}linkList;
/*
*
*函数声明
*
*/
void pop(linkList*top,ElemType*e);
linkList*InitStack(linkList*top);
linkList*push(linkList*top,ElemType data);
void getTop(linkList*top,ElemType*e);
/*
*
*获取栈的长度
*
*/
int getLength(linkList*top)
{linkList*p=top;int n=0;p=top->next;while(p!=NULL){n++;p=p->next;}return n;
}
/*
*
*获取栈顶的元栈素
*
*/
void getTop(linkList*top,ElemType*e)
{if(!top)cout<<"栈无效!"<<endl;if(!top->next)cout<<"栈为空!"<<endl;*e=top->next->data;}
/*
*
*初始化栈
*
*/
linkList*InitStack(linkList*top)
{top=(linkList*)malloc(sizeof(linkList));top->next=NULL;return top;
}
/*
*
*入栈
*
*/
linkList*push(linkList*top,ElemType data)
{linkList*s=(linkList*)malloc(sizeof(linkList));s->data=data;s->next=top->next;//指向栈顶 top->next=s;//重置栈顶 cout<<s->data<<":"<<"入栈"<<endl;return top; //返回栈顶指针 }
/*
*
*出栈
*
*/
void pop(linkList*top,ElemType*e)
{linkList*p;*e=top->next->data;//保存节点数据 p=top->next;//获取栈顶元素 top->next=p->next;//修改栈顶指针 ,让它指向后一个节点,使其成为新的栈顶指针 free(p);//释放内存空间 }/*
*
*遍历栈
*
*/
void print(linkList*top)
{linkList*p=top->next;while(p!=NULL){cout<<"元素:"<<p->data<<endl;p=p->next;}
}
int main()
{linkList*top;top=InitStack(top);int chose; cout<<"----------------------------------------"<<endl;cout<<"--------------1.入栈--------------------"<<endl;cout<<"--------------2.出栈--------------------"<<endl;cout<<"--------------3.遍历栈------------------"<<endl;cout<<"--------------4.获取栈顶元素------------"<<endl;cout<<"--------------5.获取栈的长度------------"<<endl;cout<<"--------------0.退出--------------------"<<endl;cout<<"----------------------------------------"<<endl;do{cout<<endl;cout<<"选择:";cin>>chose;switch(chose){case 1:ElemType data;cout<<"请输入入栈的元素,输入0结束!"<<endl;cout<<endl;cin>>data;while(data!=0){top=push(top, data);cout<<"输入:";cin>>data;}break;case 2:ElemType e;pop(top,&e);cout<<e<<"出栈"<<endl;break;case 3:cout<<"全部元素为:"<<endl;print(top);break;case 4:ElemType x;getTop(top,&x);cout<<"栈顶元素为:"<<x<<endl;break;case 5:cout<<"栈的长度为:"<<getLength(top)<<endl;break;case 0:break;}}while(chose!=0);}

运行图片


结语:

整理不易,如果有用,点个赞,大恩不言谢。

栈的链式存储结构(C语言实现)相关推荐

  1. 3.3 栈的链式存储结构

    <?php header("content-type:text/html;charset=utf-8"); /*** 栈的链式存储结构的基本操作**包括* 1.初始化 __c ...

  2. 链式存储mysql_链栈:栈的链式存储结构

    前面讲完了栈的顺序存储结构,我们现在来看看栈的链式存储结构,简称为链栈. 链栈是没有附加头结点的运算受限的单链表.栈顶指针就是链表的头指针. 栈是用栈顶来做插入和删除操作,那么对于链栈的栈顶放在链表的 ...

  3. 栈的链式存储结构及实现

    今天学习栈的链式存储结构. 链式存储结构最大的好处就是没有空间的限制,通过指针指向将结点像一个链子一样把结点链接,那么栈的同样可以用于链式存储结构. 栈的链式存储结构,简称为链栈.想想看,栈只是栈顶来 ...

  4. 关于栈的链式存储结构

    之前在创建栈的链式存储结构时,想当然误以为栈的top指针会指向链表的尾结点,在创建链表结构时的写法误写为: for(j=0;j<i;j++){         temp=(struct Node ...

  5. 3.2_栈_链式存储结构(链表形式)

    [链式存储结构] 栈的链式存储结构,简称链栈. [具体实现] package com.Higgin.LinkStack;import java.util.EmptyStackException;/** ...

  6. 数据结构与算法——栈的链式存储结构及实现

    目录 前言 一.栈的链式储存结构 二.栈的链式储存结构的操作 2.1   进栈操作 2.2   出栈操作 总结 前言 讲完了栈的顺序储存结构,我们现在来看看栈的链式存储结构,简称为链栈. 由于单链表中 ...

  7. 栈的链式存储结构(企业级链表)

    #include<stdio.h> #include<stdlib.h> #include<string.h> struct StackNode{struct St ...

  8. c语言存储结构的实现,(C语言)栈的链式存储结构的实现

    #includetypedef struct Stack_Linklist{ int data; struct Stack_Linklist *next; }Node,*pNode; typedef ...

  9. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...

    还记得数据结构这个经典的分类图吧: 今天主要关注一下线性表. 什么是线性表 线性表的划分是从数据的逻辑结构上进行的.线性指的是在数据的逻辑结构上是线性的.即在数据元素的非空有限集中 (1) 存在唯一的 ...

最新文章

  1. 「自然语言处理NLP」的“高光时刻” --- 28篇标志性论文
  2. UML类图与类的关系
  3. AngularJs 键盘事件和鼠标事件
  4. SpringMVC-获得Restful风格的参数
  5. Python学习 - 常用模块(二)
  6. 计算机组成SRAM,静态读写存储器(SRAM)-计算机组成原理与汇编语言-电子发烧友网站...
  7. 构建测试的体系化思维(进阶篇)
  8. 软件测试面试-测试的目的是什么?【高频】
  9. linux boot 缺省状态,Bootload启动过程全描述(uclinux)【转载】
  10. BT5的 U盘启动 制作
  11. Android平板的磁盘分区,平板电脑硬盘分区 Original Pad到PC:教您将Win10安装到Android平台...
  12. 附近的人实现原理详细剖析!
  13. coreldraw x7 分布_CDR X7新增功能有哪些,CDR X7新功能介绍
  14. 用极大似然法估计因子载荷矩阵_[转载]第三十六课         因子分析
  15. phpmywind 数据库 上传服务器后乱码
  16. skyeye linux qt,Ubuntu 16.04上安装SkyEye及测试
  17. MOFs/氧化硅;MOFs/石墨烯;MOFs/生物相容性水凝胶合成方法
  18. redis介绍命令性能数据及监控缓存穿透
  19. 计算机应用和教学,《计算机应用基础》教学方法浅析
  20. 远程linux还原本地bak文件,Linux -- 服务器数据备份恢复策略

热门文章

  1. java stream filter map collector使用
  2. java多线程爬虫框架crawler4j的使用
  3. C语言有参函数调用时参数值传递问题
  4. Mr. Bender and Square
  5. 深入解读:获得 2021 Forrester 全球云数仓卓越表现者的阿里云数据仓库
  6. 最佳途径 | 容器规模化落地如何四步走?
  7. 天弘基金交易数据清算从8小时缩至1.5小时 解决余额宝算力难题
  8. 码上用它开始Flutter混合开发——FlutterBoost
  9. 考察数据科学家支持向量机(SVM)知识的25道题,快来测测吧
  10. ERP物理机迁移至阿里云实践