首页 > 其他分享 >数据结构——栈

数据结构——栈

时间:2023-09-12 22:23:41浏览次数:34  
标签:Node temp int top 数据结构 data void

一、用数组实现栈的功能

#include<iostream>//用数组实现栈的功能
using namespace std;
#define MAX_SIZE 101//定义此栈最大空间为101
int A[MAX_SIZE];
int top = -1;//定义全局变量top表示栈顶,当栈为空时,top=-1
void Push(int x) {//压栈操作
	if (top == MAX_SIZE - 1) {
		cout << "Error:Stack overflow";
		return;
	}
	else {
		A[++top] = x;//等价于top++ A[top]=x;
	}
}
void Pop() {//弹栈操作
	if (top == -1) {
		cout << "Error:No element to pop";
		return;
	}
	else {
		top--;
	}
}
int Top() {//输出栈顶的值
	return A[top];
}
void Print() {//打印整个栈
	for (int i = 0; i <= top; i++) {
		cout << A[i] << " ";
	}
	cout << endl;
}
int main() {
	Push(1);
	Push(3);
	Print();
	Push(10);
	Pop();
	Print();
	Push(9);
	Print();
	cout << Top();
	return 0;
}

二、用链表实现栈的功能

#include<iostream>
using namespace std;
struct Node {
	int data;
	Node* link;
};
Node* top = NULL;//定义栈顶为全局变量
int num = -1;
void Push(int x) {
	Node* temp = new Node;//开辟一个新的节点
	temp->data = x;//将新的节点的数据端改成x
	temp->link = top;//将新的节点的地址端改成top
	top = temp;//更新top
	num++;
}
void Pop() {
	Node* temp = new Node;
	if (top == NULL)return;
	else {
		temp = top;
		top = top->link;
		delete temp;
		num--;
	}
}
int Top() {
	return top->data;
}
void Print() {
	int a[10];
	int i = 0;
	Node* temp = top;
	while (temp != NULL) {//用数组存放链表data,然后将数组逆序输出
		a[i]=temp->data;
		temp = temp->link;
		i++;
	}
	for (int j = num; j >= 0; j--) {
		cout << a[j] << " ";
	}
	cout << endl;
}
int main() {
	Push(1);
	Push(3);
	Print();
	Push(10);
	Pop();
	Print();
	Push(9);
	Print();
	cout << Top();
}

三、用栈反转一个字符串

#include<iostream>
#include<stack>
using namespace std;
void Reverse(char a[], int n) {
	stack<int> S;//建立一个名为S的栈
	for (int i = 0; i < n; i++) {
		S.push(a[i]);
	}
	for (int i = 0; i < n; i++) {
		a[i] = S.top();
		S.pop();
	}
}
int main() {
	char a[20];
	int n;
	cout << "请输入字符串:";
	cin >> a;
	n = strlen(a);
	Reverse(a,n);
	cout << "反转后的字符串:"<<a;
}

标签:Node,temp,int,top,数据结构,data,void
From: https://www.cnblogs.com/Smera1d0/p/17697984.html

相关文章

  • Redis五种数据类型及其数据结构
    Redis五种数据类型String数据结构:SDS应用类型:缓存数据,计数,互斥锁List数据结构:压缩列表或者双向链表应用类型:缓存链表或者作为队列Hash数据结构:压缩列表或者哈希表应用类型:缓存对象Set数据结构:整型集合或者哈希表应用类型:缓存集合,例如好友关系Zset......
  • 《Hello算法》笔记2数据结构
    逻辑结构逻辑结构揭示了数据元素之间的逻辑关系。线性数据结构:数组、链表、栈、队列、哈希表。非线性数据结构:树、堆、图、哈希表。 线性结构:数组、链表、队列、栈、哈希表,元素之间是一对一的顺序关系。树形结构:树、堆、哈希表,元素之间是一对多的关系。网状结构:图,元素......
  • 数据结构之链表
    说明链表是数据结构中的线性结构,用于存储一系列元素(节点),其中每个元素都包含一个指向下一个元素的引用。链表由一组节点组成,每个节点包含两个部分:数据和指向下一个节点的指针(或引用)。线性结构中对比数组/列表的优势:插入和删除性能较好涉及的概念:1.节点:节点包括2个域,元素域、......
  • 一道数据结构
    题意:给定长度为\(n\)的序列\(a\),\(m\)次询问,每次询问区间\([l,r]\)中选取三个点\(i,j,k\)满足\(l\lei<j<k\ler\)且\(j-i\lek-j\),你需要使得\(a_i+a_j+a_k\)最大,输出这个最大值。数据范围:\(3\len\le5\times10^4\),\(1\lea_i\le10^9\),\(1\lem\le5\times1......
  • hotel数据结构分析
           ......
  • 一种高效且节约内存的聚合数据结构的实现
    一种高效且节约内存的聚合数据结构的实现在特定的场景中,特殊定制数据结构能够得到更加好的性能且更节约内存。聚合函数GroupArray的问题GroupArray聚合函数是将分组内容组成一个个数组,例如下面的例子:SELECTgroupArray(concat('ABC-',toString(number)))fromnumbers(20)gr......
  • 数据结构思维导图
    思维导图......
  • C数据结构-线性表之顺序表
    什么是线性表线性表的插入元素线性表的删除元素线性表顺序存储的缺点线性表的特点1.线性表的实例首先我们创建3个文件,分别如下:liner_data--sqlist.c--sqlist.h--test.csqlist.h//.h文件中定位数据的结构以及函数的方法typedefintdata_t;#defineN128......
  • 9.9数据结构
    ADT抽象数据类型:数据抽象、数据封装特点:数据封装,实现与现实分离,信息隐藏 数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理数据项:是组成数据元素的,有独有的含义,不可分割的最小单位 在计算机中存储数据时,通常不仅要存储各数据元素的值,还要存储数据元素......
  • 数据结构-封装队列
    list_queue.h#ifndefLIST_QUEUE_H#defineLIST_QUEUE_H#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#defineTYPEint// 节点结构typedefstructNode{ TYPEdata; structNode*next;}Node;// 设计链式队列结构typedefstructList......