链栈的实现 C语言/C++
堆栈的链式存储C/C++实现--链栈
与顺序栈相比,链栈的优点在于不存在栈满上溢的问题。链栈通常使用单链表实现,进栈、出栈操作就是在单链表表头的
插入、删除操作。用单链表实现链栈时,使用不带头结点的单链表较为方便。
链栈的存储类型可描述为:
1 typedef int ElemType;
2 struct Node {
3 ElemType data; //栈中元素
4 Node* next; //下一个元素的指针
5 };
6 typedef Node* LinkStack;
这里data是栈中存放的元素;next指针指向栈的下一个元素。单链表头指针指向栈顶元素,每个元素(包括栈顶元素)在内,
其next指针指向本元素的下一个元素,即刚好比自己早入栈的那个元素。
具体操作实现:
1 /* 链栈
2
3 实现操作:
4 *1 进栈
5 *2 出栈
6 *3 读栈顶元素
7 *4 判空
8
9 代码使用不带头结点的单链表实现链栈,
10 入栈、出栈操作相当于单链表在表头的
11 插入、删除操作。
12 */
13 #include <iostream>
14 #include <cstdio>
15 using namespace std;
16
17 typedef int ElemType;
18 struct Node {
19 ElemType data; //栈中元素
20 Node* next; //下一个元素的指针
21 };
22 typedef Node* LinkStack;
23
24 //初始化一个链栈
25 void InitLinkStack( LinkStack& S )
26 {
27 //S永远指向栈顶元素,初始化时栈为空,S初始化为NULL
28 S = NULL;
29 }
30
31 //判空
32 bool StackEmpty( LinkStack S )
33 {
34 if( S == NULL )
35 return true;
36 return false;
37 }
38
39 //进栈:将元素x压入堆栈
40 bool Push( LinkStack& S, ElemType x )
41 {
42 Node* temp = new Node;
43 temp->data = x;
44 if( S == NULL ) {
45 S = temp;
46 S->next = NULL;
47 return true;
48 }
49 temp->next = S;
50 S = temp;
51 return true;
52 }
53
54 //出栈:将栈顶元素出栈,并将其值用x带回
55 bool Pop( LinkStack& S, ElemType& x )
56 {
57 if( S == NULL )
58 return false;
59 x = S->data;
60 Node* toFree = S;
61 S = S->next; //新栈顶
62 delete toFree;
63 return true;
64 }
65
66 bool GetTop( LinkStack S, ElemType x )
67 {
68 if( S == NULL )
69 return false;
70 x = S->data;
71 return true;
72 }
73
74 void test1()
75 {
76 LinkStack S;
77 InitLinkStack(S);
78 for( int i=1; i<=50; i++ ) {
79 if( Push(S,i) ) {
80 cout << "入栈成功,入栈的元素是:" << i << endl;
81 }
82 else cout << "入栈失败 " << endl;
83 }
84
85 cout << "-------------------------------" << endl;
86 while( !StackEmpty(S) ) {
87 int x = 0;
88 Pop(S,x);
89 cout << x << endl;
90 }
91
92 }
93
94 int main()
95 {
96 test1();
97 return 0;
98 }
上一篇【堆栈的顺序存储实现】:https://www.cnblogs.com/pkuqcy/p/14963957.html
链栈的实现 C语言/C++的更多相关文章
- 链栈的基本操作(C语言)
栈的链式储存结构称为链栈.链栈的节点类型与链式线性表的节点类型 定义相同,不同的是它是仅在表头进行操作的单链表.链栈通常用不带头节 点的单链表来实现,栈顶指针就是链表的头指针 ,如图所示: 代码如下: ...
- C语言简单实现链栈基本几个功能(适合新手看,大神可指正)
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
- C语言简单实现链栈基本几个功能
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
- C语言实现链栈以及基本操作
链栈,即用链表实现栈存储结构.链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如下下图所示: 将链表头部作为 ...
- 【小白成长撸】--链栈(C语言版)
// 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...
- C语言实现链栈的初始化&进栈&出栈&读取栈顶元素
/*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...
- C语言链栈
链栈与链表结构相似 typedef int elemtype; typedef struct linkedStackNode{ elemtype e; struct linkedStackNode * ...
- 数据结构 - 链栈的实行(C语言)
数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- 纯C语言实现链栈
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct StackNode{ E ...
随机推荐
- iptables五表五链及对应实例
iptables是Linux系统上用于配置网络包过滤规则的工具,它使用表(tables)和链(chains)来组织规则.以下是iptables中的五表五链及其对应的实例说明: 五表 filter表:默 ...
- 基于BES2500芯片的方案开发总结和反思
前记 虽然蓝牙芯片现在非常多,可是一旦想做一些差异化的产品时候,能用的非常少.在和客户的反复斟酌中,最终选择了BES2500来开发这款新的产品.这里面是基于自身的实力,产品定位和芯片诉求多重考量的 ...
- idea的使用操作
怎么让idea中的方法之间显示横线 点击setting 选择Editor 选择Appearance 选择Show method separators 效果: 如果设置idea的标签页可以多行显示 点击 ...
- 记录--uniapp 使用原生子窗体进行视频聊天
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 现在 uniapp 开发的实时音视频聊天类的 APP 大部分都要在 nvue 页面上进行开发.虽然 nvue 与 vue 的区别不是很大, ...
- iOS Modern Collection View
TL;DR 使用的技术: Compositional layout + Diffable data source.iOS 14+. 创建 layout 以描述布局: 创建 dataSource 以提供 ...
- dynatrace监控发现Java代码中new对象耗时100多秒
排查代码发现两个原因: 1.流,之前用的字节流,通过打日志发现并发场景有效率问题,改为了字符流: 2.用的jaxb转换xml,也是在并发时效率急剧下降,发现在每次转换时都在创建新对象,修改为只有第一次 ...
- 基础教材系列:Linux原理《趣谈linux》极客时间笔记
1.电脑一通电,先运行主板上ROM(只读存储器)里写死的程序BIOS,BIOS去找要运行什么操作系统,运行操作系统的第一段代码,创建0号进程,它是这次开机所有进程的爹, 2.然后操作系统代码里先初始化 ...
- R语言安装教程
R 语言官方网站:The Comprehensive R Archive Network 官方镜像站列表:CRAN - Mirrors 一.官网下载R安装包 下载地址为:Index of /bin 进 ...
- verilog之random
verilog之random 1.基本作用 random,用于产生随机数.在测试时,有时需要测试的情况太多,无法一一列举,就需要使用抽样测试的方法验证功能是否可行.random是一个有返回值的系统函数 ...
- #min_max容斥#HDU 4336 Card Collector
题目 有\(n\)张牌,获得第\(i\)张牌的概率为\(p_i\), 问期望多少次能收集完\(n\)张牌 分析 题目求的是\(E(\max S)\),根据min_max容斥可以得到, \[E(\max ...