入栈初体验

入栈初体验

#include <iostream>
#include <cstdlib>
using namespace std;
//注意top指针的移动 

const int Stack_Init_Size = 20;
const int StackIncrement = 10;
const int MaxSize = 5;
typedef int ElemType;
typedef struct {
	ElemType *top;
	ElemType *base;
	int stackSize;
}sqStack;

bool InitStack(sqStack *s);
bool Push(sqStack *s);
bool Pop(sqStack *s);
bool ClearStack(sqStack s);
bool DestoryStack(sqStack *s);
bool ShowStack(sqStack s);
int LenStack(sqStack s);
void ShowMenu();

int main()
{
	sqStack s;
	InitStack(&s);
	ShowMenu();
	cout << "Intial Done.\n";
	int len;
	
	char oops;
	while(1){
		cout << "Enter a number that you want: ";
		cin >> oops;
		switch(oops)
		{
			case '1':	Push(&s);
						cout << "Push Done.\n";	break;
			case '2':	Pop(&s);
						cout << ";Pop Done.\n";	break;
			case '3':	ClearStack(s);
						cout << "Clear Done.\n";	break;
			case '4':	DestoryStack(&s);
						cout << "Destory Done.\n";	break;
			case '5':	ShowStack(s);
						cout << "This is your Stack.\n";	break;
			case '6':	len = LenStack(s);
						cout << "Your Stack length is: " << len << endl;
						break;
			default	:	cout << "Done.\n";	return 0;
		}
	}
	return 0;
}

void ShowMenu()
{
	cout.width(20);
	cout << "Create a sqStack" << endl;
	cout << "Press 1 to Push Stack.\n";
	cout << "Press 2 to Pop Stack.\n";
	cout << "Press 3 to Clear Stack.\n";
	cout << "Press 4 to Destory Stack.\n";
	cout << "Press 5 to Show Stack.\n";
	cout << "Press 6 to Show Stack Length.\n";
}

bool InitStack(sqStack *s)
{
	s->base = (ElemType *)malloc(Stack_Init_Size * sizeof(ElemType));
	if(!s->base)
	{
		cout << "Intital Error.\n";
		return false;
	}
	s->top = s->base;
	s->stackSize = Stack_Init_Size;
	return true;
}

bool Push(sqStack *s)
{
	ElemType item;
	cout << "Enter a number to insert: ";
	cin >> item;
	if(s->top - s->base >= s->stackSize)
	{
		s->base = (ElemType *)realloc(s->base,(s->stackSize+StackIncrement)*sizeof(ElemType));
		if(!s->base)
		{
			cout << "Increment Error.\n";
			return false;
		}
	}
	*(s->top) = item;
	s->top++;
	return true;
}

bool Pop(sqStack *s)
{
	if(s->top == s->base)
	{
		cout << "It's empty.\n";
		return false;
	}
	cout << *--(s->top) << endl;
	return true;
}

bool ClearStack(sqStack s)
{
	if(s.top == s.base)
	{
		cout << "It's empty.\n";
		return false;
	}
	s.top == s.base;
	return true;
}

bool DestoryStack(sqStack *s)
{
	if(s->top == s->base)
	{
		cout << "It's empty.\n";
		return false;
	}
	int len;
	len = s->stackSize;
	for(int i=0; i<len; i++){
		delete(s->base);
		s->base++;
	}
	s->base = s->top = NULL;
	s->stackSize = 0;
	return true;
}

bool ShowStack(sqStack s)
{
	if(s.top == s.base)
	{
		cout << "It's empty.\n";
		return false;
	}
	while(s.top != s.base){
		cout << --s.top << ' ';
	}
	return true;
}

int LenStack(sqStack s)
{
	if(s.top == s.base)
	{
		cout << "It's empty.\n";
		return 0;
	}
	return s.top - s.base;
}



顺序栈初体验——数据结构初学者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值