链栈的实现 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 ...
随机推荐
- linux 系统目录详解
tmpfs 的优势: 1,动态文件系统的大小. 2,tmpfs 的另一个主要的好处是它闪电般的速度.因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的. 3,tmpfs 数 ...
- 【Leetcode】53. 最大子数组和
题目(链接) 给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 子数组是数组中的一个连续部分. 示例 1: 输入:nums = [-2,1,-3, ...
- 记录--怎么实现一个3d翻书效果
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本篇主要讨论以下两种翻书动画的实现: 第一种是整页翻转的效果: 这种整页翻转的效果主要是做rotateY的动画,并结合一些CSS的3d属性 ...
- 【Spring注解驱动开发】@PostConstruct与@PreDestroy源码的执行过程
写在前面 在前面的<[String注解驱动开发]你真的了解@PostConstruct注解和@PreDestroy注解吗?>一文中,我们简单的介绍了@PostConstruct注解与@Pr ...
- Python 生成二维码的几种方式、生成条形码
一: # 生成地维码 import qrcode import matplotlib.pyplot as plt from barcode.writer import ImageWriter 创建QR ...
- 【Pavia】遥感图像数据集下载地址和读取数据集代码
[Pavia]遥感图像数据集下载地址和读取数据集代码 目录 [Pavia]遥感图像数据集下载地址和读取数据集代码 前言 Pavia数据集 Pavia数据集地址: Pavia数据集预览 PaviaU.m ...
- 一个可以让你有更多时间摸鱼的WPF控件(二)
前言 上文介绍了如何通过一个Form自定义控件来简化数据的录入,并自动实现数据校验,自动布局排列等功能.本文继续介绍如何优化表格控件的使用,缩减代码量,实现工作效率的提升. 一.功能实现 上文中分析了 ...
- ET介绍——为什么使用C# .net core做服务端?
为什么使用C# .net core做服务端? 游戏服务端从早期的单服到分布式,开发越来越复杂,对稳定性,开发效率要求越来越高.开发语言的选择也逐步发生了变化,C 到 C++ 到 C++ + PYTHO ...
- 运维排查 | Systemd 之服务停止后状态为 failed
哈喽大家好,我是咸鱼. 我们知道 CentOS 7 之后,Systemd 代替了原来的 SystemV 来管理服务,相比 SystemV ,Systemd 能够很好地解决各个服务间的依赖关系,还能让所 ...
- Cesium 根据飞机航线计算飞机的Heading(偏航角)、Pitch(俯仰角)、Roll(翻滚角)
需求 设置飞机的一些坐标位置(经纬度高度),插值得到更多的坐标位置,然后飞机按照这些坐标集合形成的航线飞行,飞机的朝向.俯仰角以及飞机转弯时的翻转角根据坐标集合计算得出,而不需要手动设置heading ...