栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构———栈的基本实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构———栈的基本实现

文章目录
  • 一、栈是什么?
  • 二、具体实现
    • 1.stack.h
    • 2.stack.cpp
    • 3.test.cpp
  • 总结



一、栈是什么?

栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端为栈顶,另一端为栈底。栈中元素遵循先进后出的原则
假设我们依次将1, 2, 3, 4压入栈中

二、具体实现

废话不多说,来,上代码!

1.stack.h
#include 
#include 
#include 

using namespace std;

typedef int Type;

struct Stack
{
	Type* a;
	int top;
	int capacity;
};

void Init_stack(Stack* s);

void Push_back(Stack* s, Type x);

void Pop(Stack* s);

Type get_top(Stack* s);

int stack_size(Stack* s);

bool is__empty(Stack* s);

void stack_Destroy(Stack* s);
2.stack.cpp

代码如下(示例):

#include "Stack.h"

void Init_stack(Stack* s)
{
	s->capacity = 5;
	s->top = 0;
	s->a = (Type*)malloc(sizeof(Type) * s->capacity);
}

void check(Stack* s)
{
	if (s->capacity == s->top)
	{
		int newcapacity = s->capacity * 2;
		Type* tmp = (Type*)realloc(s->a, sizeof(Type) * newcapacity);
		if (tmp != NULL)
		{
			s->a = tmp;
			s->capacity = newcapacity;
		}
		else
			perror("realloc:");
	}
}

void Push_back(Stack* s, Type x)
{
	check(s);
	s->a[s->top] = x;
	s->top++;
}

bool is__empty(Stack* s)
{
	if (s->top <= 0)
		return true;
	else
		return false;
}

void Pop(Stack* s)
{
	assert(!is__empty(s));
	s->top--;
}

Type get_top(Stack* s)
{
	assert(!is__empty(s));
	return s->a[s->top-1];
}

int stack_size(Stack* s)
{
	return s->top;
}

void stack_Destroy(Stack* s)
{
	s->a = NULL;
	s->capacity = 0;
	s->top = 0;
	s = NULL;
}
3.test.cpp
#include "Stack.h"

void menu()
{
	cout << "---------------------------------------------" << endl;
	cout << "----1.入栈-----------------2.出栈------------" << endl;
	cout << "----3.获得栈顶-------------4.判空------------" << endl;
	cout << "----5.获取栈内元素长度-----6.销毁栈----------" << endl;
	cout << "---------------------------------------------" << endl;
}

enum function
{
	Exit,
	push_back,
	pop,
	get_topval,
	isempty,
	get_size,
	destroy
};

void test()
{
	Stack s;
	Init_stack(&s);
	int choice = 0;
	do {
		menu();
		cin >> choice;
		switch (choice)
		{
		case push_back:
			int x;
			cout << "输入要入栈的元素:";
			cin >> x;
			Push_back(&s, x);
			break;

		case pop:
			Pop(&s);
			break;

		case get_topval:
			cout << get_top(&s) << endl;
			break;

		case isempty:
			if (is__empty(&s))
				cout << "Yes" << endl;
			else
				cout << "No" << endl;
			break;

		case get_size:
			cout << stack_size(&s) << endl;
			break;

		case destroy:
			stack_Destroy(&s);
			break;

		case Exit:
			cout << "退出!" << endl;

		}

	} while (choice);
}
int main()
{
	test();
}

总结

栈是一种后进先出的数据结构,由于作者水平和经验不多,目前直到的具体应用场景为二叉树的遍历和图的深度优先遍历方面,随着以后学习的深入,我会进一步补充和修改这方面。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971116.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号