标签:选项 [] list delete 必须 out amp 初始化 分配
#include <iostream>
#include <stdlib.h>
#define MAXLISTSIZE 100  //预设的存储空间最大容量
using namespace std; 
typedef string ElemType;
typedef struct{
	ElemType *base;  //存储空间基址
	int top;  //栈顶指针
	int stacksize;  //允许的最大存储空间以元素为单位
}Stack;
void InitStack(Stack &S);
void DestroyStack(Stack &S);
void Push(Stack &S);
void Pop(Stack &S);
void GetTop(Stack S);
void StackLength(Stack S);
void StackEmpty(Stack S);
int main(void)
{
    Stack S;
    int z;
    cout << "+---------------------------+" << ‘\n‘;
    cout << "|----------顺序栈-----------|" << ‘\n‘;
    cout << "+---------------------------+" << ‘\n‘;
    cout << "提示:为保证您的操作得到保存,请按正常顺序退出系统^_^" << ‘\n‘;
    do
    {
        cout << ‘\n‘ << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"--------------------------------" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+             主菜单              |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+--------------------------------" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+    [1]----顺序栈初始化操作       |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+    [2]----顺序栈的销毁操作       |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+    [3]----顺序栈的入栈操作       |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+    [4]----顺序栈的出栈操作       |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+    [5]----顺序栈取栈顶元素       |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+    [6]----顺序栈求栈长操作       |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+    [7]----顺序栈的判空操作       |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+    [0]----退出系统               |" << ‘\n‘;
        cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"-----------------------------------" << ‘\n‘;
        cout << "请输入您的选择:";
        cin >> z;  
        switch(z)
        {
        case 0 :    break;
        case 1 : InitStack(S);break;
        case 2 : DestroyStack(S);break;
        case 3 : Push(S);break;
        case 4 : Pop(S);break;
        case 5 : GetTop(S);break;
        case 6 : StackLength(S);break;
        case 7 : StackEmpty(S);break;	
        default:cout << "无效选项!" << ‘\n‘;system("pause");     		
        }
    }
    while(z!= 0);
}
void InitStack (Stack &S)
{
	// 构造一个最大存储容量为 maxsize 的空栈 S
	int maxsize;
	cout << "请输入栈的最大储存容量:";
	cin >> maxsize;
	if (maxsize == 0)
		maxsize = MAXLISTSIZE;
	S.base = new ElemType[maxsize];
	if (!S.base) exit(1);  //存储分配失败
	S.stacksize = maxsize;
	S.top = 0;	//空栈中元素个数为0
	system("pause");
}
void Push(Stack &S)
{
	ElemType e;
	int j, n;
	if (S.stacksize == 0)  
	{
		cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
		system("pause");
		return; 
	}
	if (S.top == S.stacksize)
	{
		cout << "栈已满,无法进行插入" << endl;
		system("pause");
		return;
	}
	cout << "请输入压入栈的元素个数(元素个数必须小于或等于" << S.stacksize - S.top << "):";
	cin >> n;
	cout << "请输入压入栈的元素:";
	for(j = 0; j < n; j++)
	{
		cin >> e;
		*(S.base + S.top) = e;   // 插入新的元素 
		++S.top;  // 栈顶指针后移 
	}
	system("pause");
}
void Pop(Stack &S)
{
	ElemType e;
	int j, n;
	if (S.stacksize == 0)
	{
		cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
		system("pause");
		return; 
	}
	if (S.top == 0)
	{
		cout << "栈为空,无法出栈" << endl;
		system("pause");
		return;
	}
	cout << "请输入出栈的元素个数(出栈元素个数应小于或等于" << S.top << "):";
	cin >> n;
	cout << "出栈的元素为:"; 
	for(j = 0; j < n; j++)
	{
		e = *(S.base + S.top-1); // 返回非空栈中栈顶元素 
		cout << e << ‘ ‘;
		--S.top;  // 栈顶指针前移
	}
	cout << endl;
	system("pause");
}
void GetTop(Stack S)
{
	ElemType e;
	if (S.stacksize == 0)
	{
		cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
		system("pause");
		return; 
	}
	if (S.top == 0)
	{
		cout << "栈为空,无法获取栈顶元素" << endl;
		system("pause");
		return;
	}
	e = *(S.base + S.top-1); // 返回非空栈中栈顶元素
	cout << "栈顶元素为:" << e << endl;
	system("pause");
}
void StackEmpty(Stack S)
{
	if (S.stacksize == 0)
	{
		cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
		system("pause");
		return; 
	}
	if(S.top == 0)
		cout << "该顺序栈为空栈" << endl;
	else
		cout << "该顺序栈不为空栈" << endl;
	system("pause");
}
void StackLength(Stack S)
{
	if (S.stacksize == 0)
	{
		cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
		system("pause");
		return; 
	}
	// 返回S的元素个数,即栈的长度
	cout << "栈长为:" << S.top << endl;
	system("pause");
}
void DestroyStack(Stack &S)
{
	// 销毁栈S,S不再存在
	if (S.stacksize == 0)
	{
		cout << "栈已销毁或栈未初始化,请选择1初始化栈" << endl;
		system("pause");
		return; 
	}
	delete[] S.base;
	S.top = 0;
	S.stacksize = 0;
	cout << "栈已销毁" << endl; 
	system("pause");
}
标签:选项 [] list delete 必须 out amp 初始化 分配
原文地址:http://www.cnblogs.com/wwttsqt/p/7783183.html