链栈的实现 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 ...
随机推荐
- stm32 文件系统数据读写源码解析
一 概念 fatfs文件系统在文件读写中不可或却.熟悉和深入理解是一个不可或缺的前提. 这里面需要先明确几个概念:文件open的属性,这个非常重要.可以并列使用. 二 源码解析 A 写入数据: i ...
- dbvisualizer不能执行pl/sql块
如果是如下语句: begin dbms_output.put_line('Hello World!'); end; 控制台会报错 解决方案:语句改写为如下 --/ begin ...
- 7.3万字肝爆Java8新特性,我不信你能看完!(建议收藏)
大家好,我是冰河~~ 说实话,肝这篇文章花了我一个月的时间,关于Java8的新特性全在这儿了,建议先收藏后阅读. Java8有哪些新特性? 简单来说,Java8新特性如下所示: Lambda表达式 函 ...
- mybatis调用Oracle存储过程 带游标
存储过程 CREATE OR REPLACE PROCEDURE proc_test2(p_id IN NUMBER, v_cur OUT SYS_REFCURSOR, p_result_code O ...
- KingbaseES生成动态SQL
1. 动态SQL 动态SQL在程序启动时会根据输入参数替换相应变量.使用动态SQL可以创建更强大和灵活的应用程序,但在编译时SQL语句的全文不确定,因此运行时编译会牺牲一些性能.动态SQL可以是代码或 ...
- KingabseES-SQL优化_提升子查询
什么是提升子查询/子链接 SubLink,子查询/子链接,他们的区别:子查询不在表达式中子句,子链接在in/exists表达式中的子句. 若以范围表的方式存在,则是子查询: 若以表达式的存在,则是子连 ...
- OpenHarmony Camera源码分析
一.简介 当前,开源在科技进步和产业发展中发挥着越来越重要的作用,OpenAtom OpenHarmony(简称"OpenHarmony")赋予了开发者孕育创新的种子,也为数字化产 ...
- 数据库操作入门:PyMongo 和 MongoDB 的基本用法
MongoDB MongoDB是一种流行的NoSQL数据库,它将数据存储在类似JSON的文档中,使数据库非常灵活和可扩展 PyMongo Python需要一个MongoDB驱动程序来访问MongoDB ...
- C# Winform Socket点对点通信
前言 Socket的英文原义是"孔"或"插座",其实在网络编程中Socket就是这个意思,就像我们打电话,要首先知道对方的手机号一样,这个手机号就相当于一个So ...
- Linux Ubuntu配置国内源
配置国内源 因为众所周知的原因,国外的很多网站在国内是访问不了或者访问极慢的,这其中就包括了Ubuntu的官方源. 所以,想要流畅的使用apt安装应用,就需要配置国内源的镜像. 市面上Ubuntu的国 ...