链栈的实现 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 ...
随机推荐
- Java使用Steam流对数组进行排序
原文地址:Java使用Steam流对数组进行排序 - Stars-One的杂货小窝 简单记下笔记,不是啥难的东西 sorted()方法里传了一个比较器的接口 File file = new File( ...
- [TM4]TM4C123G使用笔记
[TM4]TM4C123G使用笔记 TI的板子真让人头大甚至重装了两遍KEIL5 如何用keil5新建工程可以参考如下博客: https://blog.csdn.net/D_XingGuang/art ...
- 你是怎么理解ES6中Proxy的?使用场景?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.介绍 定义: 用于定义基本操作的自定义行为 本质: 修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta pro ...
- 记录--Three.js入门教程——教不会算我输
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在javascript中使用Three.js设计并且实现3D场景是一个很有意思的事情,因为在浏览器中就能够渲染出3D场景,非常简单和轻便. ...
- c# WPF制作百度网盘资源搜索工具
界面如下 1.搜索中 2.搜索成功 源码地址:https://github.com/BruceQiu1996/BaiduDiskSearcher 希望有用的学到的或者对此感兴趣的可以给一个star,谢 ...
- ubuntu18.04如何运行.exe文件
在Ubuntu上安装Wine 到wine官网查看的安装步骤 如果您之前安装过来自其他仓库的 Wine 安装包,请在尝试安装 WineHQ 安装包之前删除它及依赖它的所有安装包(如:wine-mono. ...
- fs.1.10 ON CENTOS7 docker镜像制作
概述 freeswitch是一款简单好用的VOIP开源软交换平台. centos7 docker上编译安装fs1.10版本的流程记录. 环境 docker engine:Version 24.0.6 ...
- wordpress自建博客站,在页脚添加网站总运行时间
wordpress自建博客站,在页脚添加网站总运行时间 笔者使用的主题是 GeneratePress 版本:3.1.3 <span id="momk" style=" ...
- XMIND思维导图工具入门使用方法(常用操作和快捷键)
基本操作 Tab 置入子项目 ENTER 置入平级项目 CTRL+ALT+F ZEN 专注模式 进阶操作 联系 CTRL+SHIFT+R 内容链接 概要 用括号简要概括要点[界面上部概要选项] 外框 ...
- CSS样式中的各种居中方式
1.水平居中 将margin-left和margin-right属性设置为auto,从而达到水平居中的效果. 代码: margin:0 auto; 2.文字水平垂直居中 利用line-height设为 ...