数据结构顺序栈和链栈的区别_数据结构链栈的实现代码

数据结构顺序栈和链栈的区别_数据结构链栈的实现代码实现顺序栈和链栈的、栈的初始化、入栈、出栈、获取栈顶元素功等功能。顺序栈代码如下:#include “pch.h”#include <iostream>#include<Windows.h>#include<string>using namespace std;#define OK 1#define ERROR 0#define OVE…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

实现顺序栈和链栈的、栈的初始化、入栈、出栈、获取栈顶元素功等功能。

顺序栈

代码如下:

#include "pch.h"
#include <iostream>
#include<Windows.h>
#include<string>

using namespace std;

#define OK 1
#define ERROR 0
#define OVER -2
#define MAXSIZE 100

typedef int Status;		//返回状态

//顺序表结构体
struct SqStack
{ 
   
	char *base;
	char *top;
	int StackSize;
};

//初始化顺序栈
Status InitStack(SqStack &S)
{ 
   
	S.base = new char[MAXSIZE];
	if (!S.base)
	{ 
   
		Sleep(3000);
		exit(OVER);
	}
	S.top = S.base;
	S.StackSize = MAXSIZE;
	return OK;
}

//入栈
Status Push(SqStack &s, char &e)
{ 
   
	if (s.top - s.base == s.StackSize)
	{ 
   
		return ERROR;
	}

	*(s.top) = e;			//元素入栈,栈顶指针+1
	s.top++;
	return OK;
}

//出栈
Status Pop(SqStack &s, char &e)
{ 
   
	if (s.base == s.top)
	{ 
   
		return ERROR;
	}
	e = *(s.top - 1);		//这是出栈元素
	s.top--;
	return OK;
}
//得到栈顶元素
char GetTop(SqStack &s)
{ 
   
	if (s.top != s.base)
	{ 
   
		return *(s.top - 1);
	}
}
//打印栈元素
void PrintStack(SqStack &s)
{ 
   
	if (s.top != s.base)
	{ 
   
		cout << "栈的元素为:";
		int k = 0;
		for (int i = (s.top - s.base); i > 0; i--)
		{ 
   

			cout << *(s.top - 1) << " ";
			--s.top;
			k++;
		}
		for (int j = 0; j <k; j++)
		{ 
   
			++s.top;
		}
	}
}

int main()
{ 
   
	SqStack s;

	InitStack(s);
	int n;
	cout << "请输入初始个数:";
	cin >> n;
	cout << "请输入元素:" << endl;
	for (int i = 0; i < n; i++)
	{ 
   
		char p;
		cin >> p;
		Push(s, p);
	}
	PrintStack(s);
	cout << "栈顶为:" << GetTop(s) << endl;
	char p1;
	Pop(s, p1);
	cout << "出栈后";
	PrintStack(s);
	return 0;
}

结果如下:
在这里插入图片描述

链栈

代码如下:

#include "pch.h"
#include <iostream>
#include<string>
#include<Windows.h>
using namespace std;

#define OK 1
#define ERROR 0
#define OVER -2
#define MAXSIZE 100

typedef int Status;		//返回状态


typedef struct StackNode
{ 
   
	char date;
	StackNode *next;
}*LinkStack;

//初始化链栈
Status InitStack(LinkStack s)
{ 
   
	s = NULL;
	return OK;
}

//入栈
Status Push(LinkStack s, char e)
{ 
   
	LinkStack p;
	p = new StackNode;
	p->date = e;
	p->next = s;
	s = p;
	return OK;
}

//出栈
Status Pop(LinkStack s, char &e)
{ 
   
	LinkStack p;
	if (s == NULL)
	{ 
   
		return ERROR;
	}
	e = s->date;
	p = s;				//用p临时保存栈顶元素的值
	s = s->next;		//修改栈顶指针
	delete p;
	return OK;
}

//取栈顶元素的值
char Getchar(LinkStack s)
{ 
   
	if (s!=NULL)
	{ 
   
		return s->date;
	}
	cout << "栈为空,无法取栈顶元素!" << endl;
	return ERROR;
}

int main()
{ 
   
	StackNode s;
	InitStack(&s);
	char a, b, c;
	a = 'c', b = 'b', c = 'a';
	Push(&s, a);
	Push(&s, b);
	Push(&s, c);
	cout << "出栈前栈顶为:";
	Getchar(&s);
	char e;
	Pop(&s,e);
	cout << "出栈后栈顶为:";

	return 0;
}

结果如下:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170978.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • python join函数_Python join()函数原理及使用方法

    python join函数_Python join()函数原理及使用方法函数:string.join()Python中有join()和os.path.join()两个函数,具体作用如下:join():连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串os.path.join():将多个路径组合后返回一、函数说明1、join()函数语法:’sep’.join(seq)参数说明sep:分隔符。可以为空seq:要连接的元素序列、字…

    2022年10月25日
  • 薅羊毛利器—Loon,Cookie放在本地一点也不担心[通俗易懂]

    LoonLoon是一款在iOS系统下的代理工具(目前还没有Android版本),它支持在本地执行js脚本,只需简单配置即可成为薅羊毛利器ps之前的羊毛脚本已经失效了下载可以去美区AppStore下载,价格$4.99,需要有一个美区的AppleId账号,并且充值美元可以去某宝或拼夕夕搜索并购买,价格大概在¥9.99配置然后将下面框里面的配置赋值粘贴进去,点击保存[General]#IPv6支持ipv6=false##skip-proxy和bypass-tun一般不需

    2022年4月14日
  • 动态sql模糊查询和分页「建议收藏」

    动态sql模糊查询和分页「建议收藏」文章目录动态sql模糊查询查询返回结果集的处理分页动态sqlBookMapperxmlbookservice测试:MapperSql.test运行:模糊查询BookMapperBookMapper.xmlBookserviceStringUtiles测试:一共介绍了三种模糊查询的方法,对比第三种更加实用。运行:查询返回结果集的处理BookM…

    2022年5月9日
  • BM3D算法相关笔记

    BM3D算法相关笔记三维矩阵主要原因就在于,三维矩阵中,第一维度代表行,第二维度代表列,第三维度代表页,当第三维度为1时,代表只有1页,自然缩减为二维。当第一维度为1时,代表只有一行,但是每页都有,所以,从物理的角度没有缩减为二维。http://blog.sina.com.cn/s/blog_7519cf530101ahsb.html

    2022年5月2日
  • Python快速编程入门课后习题答案「建议收藏」

    Python快速编程入门课后习题答案「建议收藏」文章目录前言第一章一、填空题二、判断题三、选择题四、简答题第二章一、填空题二、判断题三、选择题四、简答题第三章一、填空题二、判断题三、选择题四、简答题第四章一、单选题二、判断题三、填空题四、程序分析题第五章一、选择题二、判断题三、填空题四、简答题五、程序分析题第六章一、单选题二、判断题三、填空题四、简答题五、程序分析题第七章一、单选题二、判断题三、填空题四、简答题五、程序分析题第八章一、单选题二、…

    2022年6月3日
  • 前端学习——JQuery Ajax使用经验

    前端学习——JQuery Ajax使用经验

    2021年12月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号