首页 > 编程语言 >c/c++ 数据结构 顺序栈

c/c++ 数据结构 顺序栈

时间:2024-06-21 21:59:16浏览次数:14  
标签:顺序 return SqStack int top c++ printf 数据结构 data

本文是以c语言的风格编写的c++程序。

栈的特点:先进后出,后进先出。

顺序栈的结构定义:一个数组以及一个”指针“(不是真正的指针,而是位置变化的说明)

#include<stdio.h>
#include<malloc.h>
#define Maxsize 20

typedef struct
{
	int data[Maxsize];
	int top;
}SqStack;

 

初始化顺序栈:仍然是用malloc开辟一片固定大小的空间,并将top置于-1

void InitSqStack(SqStack*& S)
{
	S = (SqStack*)malloc(sizeof(SqStack));
	S->top = -1;
}

从栈底到栈顶依次输出元素

void DispSqStack(SqStack* S)
{
	if (S->top > -1)
	{
		int t = S->top;
		for (int i = 0; i < t + 1; i++)
		{
			printf("%d ", S->data[i]);
		}
		printf("\n");
	}
	else
	{
		printf("这是空的!\n");
	}
}

销毁顺序栈,仍然是free()

void DestroySqStack(SqStack*& S)
{
	free(S);
}

查看顺序栈是否为空,即top是否为-1

bool EmptySqStack(SqStack*& S)
{
	return S->top == -1;
}

 

进栈,若栈满则返回假

bool Push(SqStack*& S, int n)
{
	if (S->top == Maxsize - 1)
	{
		return false;
	}
	else
	{
		S->data[S->top + 1] = n;
		S->top++;
		return true;
	}
}

出栈,若栈为空则返回假

bool Pull(SqStack*& S, int& n)
{
	if (S->top == -1)
	{
		return false;
	}
	else
	{
		n = S->data[S->top + 1];
		S->top--;
	}
}

由栈底到栈顶查找某个位置对应的元素

void GetSqStack(SqStack* S, int n)
{
	if (n >= 0 && n <= S->top + 1)
	{
		printf("第%d个元素值为%d。\n",n,S->data[n-1]);
	}
	else {
		printf("索引不合法。\n");
	}
}

最后在main()函数上实现

int main()
{
	int a[] = { 1,2,3,4,5,6,7,8,9,10 };
	SqStack* S;
	InitSqStack(S);
	CreateSqStack(S, a, 10);DispSqStack(S);
	int a1 = 100;
	Push(S, a1);printf("元素%d进栈:",a1);
	DispSqStack(S);
	
	int e = 0; printf("最后一个元素出栈:");
	Pull(S, e); DispSqStack(S);	
	
	GetSqStack(S, 4);
	DestroySqStack(S);
	return 0;
}

标签:顺序,return,SqStack,int,top,c++,printf,数据结构,data
From: https://blog.csdn.net/2301_78564545/article/details/139870293

相关文章

  • 2020C++等级考试二级真题题解
     202012数组指定部分逆序重放c++ #include<iostream>usingnamespacestd;intmain(){  inta[110];  intn,k;  cin>>n>>k;  for(inti=0;i<n;i++){    cin>>a[i];  }  for(inti=0;i<k/2;i++){......
  • C++系统相关操作1 - 调用命令行并获取返回值
    1.关键词2.sysutil.h3.sysutil.cpp3.1.system_util_unix.cpp3.2.system_util_win.cpp4.测试代码5.运行结果6.源码地址1.关键词关键词:C++系统调用systempopen跨平台应用场景:希望直接调用操作系统的某些命令,并获取命令的返回值。2.sysutil.h#pragm......
  • C++系统相关操作2 - 获取系统环境变量
    1.关键词2.sysutil.h3.sysutil.cpp4.测试代码5.运行结果6.源码地址1.关键词C++系统调用环境变量getenv跨平台2.sysutil.h#pragmaonce#include<cstdint>#include<string>namespacecutl{/***@briefGetanenvironmentvariable.......
  • 【CSS in Depth2精译】1.1.4 源码顺序
    解决层叠冲突的最后一环叫做源码顺序,有时又称为出现顺序(orderofappearance)。如果其他判定规则均一致,则样式表中后出现的、或者在页面较晚引入的样式表声明,将最终胜出。也就是说,可以通过控制源码出现的顺序来给示例中的特色链接添加样式。如果两个存在冲突的选择器优先......
  • C++核心编程运算符的重载
    C++核心编程运算符的重载文章目录C++核心编程运算符的重载1.“+”运算符的重载1.1作为成员函数重载1.2作为全局函数重载2."<<"运算符重载2.1为什么需要重载左移运算符2.2如何重载左移运算符2.3注意事项3."++"运算符重载3.1前置递增运算符重载3.2后置递增运算符重载......
  • 2022年大作业参考报告-使用C++语言开发小学生成绩管理系统、中学生成绩管理系统、大学
    背景:目录第一章需求分析   21.1   问题描述   26.1   功能需求   26.2   开发环境   26.3   开发过程   2第二章概要设计   32.1   总体设计   32.2   类的定义   32.3   接口设计   52.4  ......
  • opencv入门-小白的学习笔记c++(1)
    注:以下是根据链接https://blog.csdn.net/Cream_Cicilian/article/details/105427752的小白学习过程。1加载、修改、保存图像1.1加载图像1.1.1加载图像cv::imread用于从文件中读取图像数据并将其存储到一个cv::Mat对象中,其中第一个参数表示图像文件名称第二个参数,表......
  • 0基础学C++ | 第03天 | 基础知识 |算术运算符 | 赋值运算符 | 比较运算符 | 逻辑运算
    前言前面已经讲了,数据类型以及求数据类型所占的空间0基础学C++|第02天|基础知识|sizeof关键字|浮点型|字符型|转义字符|字符串|布尔类型|数据的输入-CSDN博客,现在讲运算符算术运算符 作用:用于处理四则运算#include<iostream>usingnamespacestd;in......
  • String(C++)
    文章目录前言文档介绍经典题目讲解HJ1字符串最后一个单词的长度模拟实现框架构造函数析构函数迭代器c_str()赋值size()capacity()reserveempty()[]访问front/backpush_backappendoperator+=insert一个字符insert一个字符串eraseswapfind一个字符find一个字符串substr(......
  • 华为电脑BIOS设置系统启动顺序
        最近在华为电脑上装了Windows和Ubuntu双系统后,由于安装失误,导致每次开机后都会进入grub界面。    为了正常进入Windows和Ubuntu系统,在开机进入grub界面前,可以按F12进入bootmanager界面,在此界面下可以选择需要启动的系统。(请原谅我使用手机拍摄屏幕的方......