欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

栈------顺序存储

程序员文章站 2022-03-30 08:17:29
...

栈:

栈------顺序存储

栈------顺序存储

代码实现:

栈------顺序存储

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<stdio.h>
using namespace std;

//栈的结构定义
#define MAXSIZE 100
typedef int SElemType;
typedef struct SqStack
{
	SElemType data[MAXSIZE];
	int top;
}SqStack;

//初始化空栈
void initStack(SqStack &s)
{
	s.top = 0;
}

//判断栈空
bool isEmpty(SqStack s)
{
	if (s.top == 0)
	{
		printf("空栈\n");
		return true;
	}
	else
	{
		return false;
	}
}

//栈满
bool isFull(SqStack s)
{
	if (s.top == MAXSIZE)
	{
		return true;
	}
	else
	{
		return false;
	}
}

//取栈顶元素
void getTopElem(SqStack s, SElemType &e)
{
	if (!isEmpty(s))
		e = s.data[s.top - 1];
	else
		printf("空栈 ,取栈顶失败\n");
}

//入栈
void push(SqStack &s, SElemType e)
{
	if (!isFull(s))
	{
		s.data[s.top] = e;
		s.top++;
	}
	else
	{
		printf("此栈已满,入栈失败\n");
	}
}

//出栈
void pop(SqStack &s, SElemType &e)
{
	if (!isEmpty(s))
	{
		e = s.data[s.top - 1];
		s.top--;
	}
	else
	{
		printf("此栈为空,出栈失败\n");
	}
}

//利用入栈创建栈
void createSqlist(SqStack &s, int n)
{
	printf("依次输入栈内元素:\n");
	for (int i = 0; i < n; i++)
	{
		SElemType e;
		scanf("%d", &e);
		push(s, e);
		getchar();//吸入回车符
	}
}

//打印输出栈内元素
void printStack(SqStack s) {
	int stackLen = s.top;//栈长
	printf("打印栈内元素:");
	for (int i = stackLen-1; i >= 0;  i--) {
		printf("%d ", s.data[i]);
	}
	printf("\n");
}

void main()
{
	SqStack s;
	initStack(s);

	createSqlist(s, 5);//产生一个从栈顶到栈底为:a,c,e,g,i的栈
	printStack(s);

	//入栈新元素:j
	printf("输入一个新元素入栈(如2):");
	SElemType pushElem;
	scanf("%d", &pushElem);
	push(s, pushElem);
	printStack(s);

	//出栈
	SElemType popElem;
	pop(s, popElem);
	printf("\n出栈元素为%d\n", popElem);
	printStack(s);

	system("pause");
}

参考资料:

《大话数据结构》

大神博客:https://blog.csdn.net/u010366748/article/details/50639195

相关标签: