堆栈的链式存储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++的更多相关文章

  1. 链栈的基本操作(C语言)

    栈的链式储存结构称为链栈.链栈的节点类型与链式线性表的节点类型 定义相同,不同的是它是仅在表头进行操作的单链表.链栈通常用不带头节 点的单链表来实现,栈顶指针就是链表的头指针 ,如图所示: 代码如下: ...

  2. C语言简单实现链栈基本几个功能(适合新手看,大神可指正)

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

  3. C语言简单实现链栈基本几个功能

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

  4. C语言实现链栈以及基本操作

    链栈,即用链表实现栈存储结构.链栈的实现思路同顺序栈类似,顺序栈是将数顺序表(数组)的一端作为栈底,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈底,如下下图所示: 将链表头部作为 ...

  5. 【小白成长撸】--链栈(C语言版)

    // 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...

  6. C语言实现链栈的初始化&进栈&出栈&读取栈顶元素

    /*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...

  7. C语言链栈

    链栈与链表结构相似 typedef int elemtype; typedef struct linkedStackNode{ elemtype e; struct linkedStackNode * ...

  8. 数据结构 - 链栈的实行(C语言)

    数据结构-链栈的实现 1 链栈的定义 现在来看看栈的链式存储结构,简称为链栈. 想想看栈只是栈顶来做插入和删除操作,栈顶放在链表的头部还是尾部呢?由于单链表有头指针,而栈顶指针也是必须的,那干吗不让它 ...

  9. C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)

    /**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...

  10. 纯C语言实现链栈

    #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct StackNode{ E ...

随机推荐

  1. Multi-Runtime多运行时架构

    概念 Multi-Runtime Multi-Runtime 是一种服务端架构思路,把应用里的所有中间件挪到 Sidecar 里,使得"业务运行时"和"技术运行时&quo ...

  2. terminate called after throwing an instance of 'std::regex_error'(C++11)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  3. NJUPT第一次积分赛

    NJUPT第一次积分赛 最近在忙第二次积分赛以及一些很复杂的队友关系(人际关系好复杂,好想电赛出个单机模式),但最后结果还是很满意的. 突然想起来第一次积分赛写的屎山,遂拿出来给大火闻闻 没啥很新颖的 ...

  4. django(路由层)

    一.简介 # 路由匹配 url(r'test',views.test), url(r'test_add',views.test_add) # r'test'与请求头的数据进行正则匹配 ''' url方 ...

  5. JS(DOM事件高级)

    一 注册事件(绑定事件) 1.1 注册事件概述 给元素添加事件,称为注册事件或者绑定事件.注册事件有两种方式:传统方式和方法监听注册方式 1.2 addEventListener 事件监听方式 eve ...

  6. 记录--css水滴登录界面

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 今天我们来分享一款非常有趣的登录界面,它使用HTML和CSS制作,具有动态的水波纹效果,让用户在登录时感受到了一股清凉之感. 基本h ...

  7. 纯前端实现 JPG 图片压缩 | canvas

    在线 Demo 体验地址 →: https://demos.sugarat.top/pages/jpg-compress/ 前言 在迭代图床应用时,需要用到图片压缩,在之前分享了使用 UPNG.js ...

  8. KafkaProducerDemo

    package com.lxw.kafkademo; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache ...

  9. X-Y问题

    什么是X-Y问题 X-Y问题就是有人想解决问题X,他觉得Y可能是解决X的方法但不知道Y怎么做:在我们的工作中,需求方给出的来的是Y,而软件工程师不知道需要解决的X是什么. 我理解的X-Y问题是没有找到 ...

  10. 开源相机管理库Aravis学习(一)——安装

    目录 前言 Aravis简介 依赖关系说明 安装过程 meson安装 aravis源文件下载 构建和安装aravis 视频查看器 安装过程中遇到的问题 meson版本过低 CMake版本过低 缺少GS ...