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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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;
}

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

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