数据结构与算法之链式栈

简介: 链式栈的使用本篇博客遇上篇博客不同,不需要加条件判断栈是否为满,为了提高效率我们可以使用链表的前插法来表示栈,整体使用方法和单链表类似

链式栈的使用

本篇博客遇上篇博客不同,不需要加条件判断栈是否为满,为了提高效率我们可以使用链表的前插法来表示栈,整体使用方法和单链表类似

/*数据结构与算法之 栈的链式存储
实验目的:
(1) 实现栈的存储结构设计;
(2) 实现栈的操作算法设计;
(3) 利用栈实现应用问题的解决;
实验内容:
栈的初始化 
打印栈内所有元素 
 判断栈空 
 入栈和出栈算法设计;
*/
#include<iostream>
#include<Windows.h>
using namespace std;
static int length = 0;
typedef struct _LqStack {
  int data;
  struct _LqStack *next;  //指向下一节点的指针
}LqStack,LqNode;
//初始化链式栈
bool InitLq(LqStack* &Lq) {
  Lq = new LqStack;
  if (!Lq) return false;
  Lq->data = -1;
  Lq->next = NULL;
  return true;
}
//前插法入队
bool push(LqStack* &Lq, LqNode *s) {
  if (!Lq) return false;
  s->next = Lq->next;
  Lq->next = s;
  length++;
  return true;
}
//打印链表
void PrintLq(LqStack* &Lq) {
  if (!Lq) return ;
  LqStack *p = Lq->next;
  cout << "链式栈的元素依次是: ";
  while (p) {
    cout << p->data << " ";
    p = p->next;
  }
  return;
}
//出栈
bool PopLq(LqStack* &Lq, int &Element) {
  if (!Lq) return false;
  LqStack *p = Lq;
  if (Lq->next == NULL) {
    cout << "这是个空栈!  " << endl;
    return false;
  }
    Lq = Lq->next;
    Element = Lq->data;
    delete p;
    p = Lq;
    length--;
  return true;
}
int main(void) {
  LqStack *Lq;
  LqNode *s;
  if (InitLq(Lq)) {
    cout << "初始化链式栈成功! " << endl;
  } else {
    cout << "初始化链式栈失败! " << endl;
  }
  int num;  //入栈的个数
  int Element;  //记录出栈元素的值
  cout << "请输入你想要入栈的个数: ";
  cin >> num;
  //入栈,使用链式存储
  for (int i = 0; i < num; i++) {
    s = new LqNode;
    cout << "请输入你想要插入的元素: ";
    cin >> s->data;
    if (push(Lq, s)) {
      cout << "链式栈插入元素成功!  插入的元素是:  "<<s->data << endl;
    } else {
      cout << "链式栈插入元素失败! " << endl;
    }
  }
  //打印链式栈
  PrintLq(Lq);
  cout << "现在栈的个数是: " << length << endl;
  //出栈
  cout << "请输入你想要出栈的个数: ";
  cin >> num;
  for (int i = 0; i < num; i++) {
    if (PopLq(Lq, Element)) {
      cout << "出栈成功!  出栈的元素是: " << Element << endl;
    } else {
      cout << "出栈失败! " << endl;
    }
  }
  PrintLq(Lq);
  cout << "现在栈的个数是: " << length << endl;
  //栈的初始化 打印栈内所有元素  判断栈空 入栈和出栈算法设计;
  system("pause");
  return 0;
}

       20191014224716116.png                        

目录
相关文章
|
9月前
|
存储 NoSQL C语言
数据结构——顺序栈与链式栈的实现-2
数据结构——顺序栈与链式栈的实现
数据结构——顺序栈与链式栈的实现-2
|
9月前
|
存储 C语言
数据结构——顺序栈与链式栈的实现-1
数据结构——顺序栈与链式栈的实现
数据结构——顺序栈与链式栈的实现-1
|
缓存 C语言
【数据结构】栈的基本概念 | 从零开始实现数组栈 | 画图解析 | 数组栈与链式栈
本章我们将学习 "栈" ,首先介绍栈的概念和结构,然后我们将着重讲解数组栈的实现。我们从零开始写数组栈的接口,并从零开始步步解读。本章旨在筑牢栈知识点的基础,对后续的刷题有着很大的帮助。
210 0
【数据结构】栈的基本概念 | 从零开始实现数组栈 | 画图解析 | 数组栈与链式栈
|
存储
数据结构基础(13) --链式栈的设计与实现
    采用链式存储的栈成为链式栈(或简称链栈), 链栈的优点是便于多个栈共享存储空间和提高其效率, 且不存在栈满上溢的情况(因为链栈是靠指针链接到一起,只要内存够大, 则链栈理论上可以存储的...
1101 0
|
3月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
332 9
|
3月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
55 1
|
1月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
142 77
|
4天前
|
DataX
☀☀☀☀☀☀☀有关栈和队列应用的oj题讲解☼☼☼☼☼☼☼
### 简介 本文介绍了三种数据结构的实现方法:用两个队列实现栈、用两个栈实现队列以及设计循环队列。具体思路如下: 1. **用两个队列实现栈**: - 插入元素时,选择非空队列进行插入。 - 移除栈顶元素时,将非空队列中的元素依次转移到另一个队列,直到只剩下一个元素,然后弹出该元素。 - 判空条件为两个队列均为空。 2. **用两个栈实现队列**: - 插入元素时,选择非空栈进行插入。 - 移除队首元素时,将非空栈中的元素依次转移到另一个栈,再将这些元素重新放回原栈以保持顺序。 - 判空条件为两个栈均为空。
|
1月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
44 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
1月前
|
存储 C语言 C++
【C++数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现链栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储整数,最大
46 9

热门文章

最新文章