⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 excise3.cpp

📁 调试顺序结构栈的基本操作(清华大学出版社数据结构C语言版书本P44)
💻 CPP
字号:
//*****************************************************************************************
//程序作者:王国顺
//学    号:040630418
//题    目:调试顺序结构栈的基本操作(书本P44)
//*****************************************************************************************
//函数结果状态代码
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#define TRUE 1
#define FALSE 0
#define OK 1 
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;

#define STACK_INIT_SIZE   100
#define STACKINCREMENT     10
typedef struct {
	int  *base;              
	int  *top;
	int  stacksize;
}SqStack;

Status InitStack(SqStack &S)
{
	S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));    
	if(!S.base)exit(OVERFLOW);
	S.top=S.base;
	S.stacksize=STACK_INIT_SIZE;
	return  OK;
}

Status DestroyStack(SqStack &S)
{
	free(S.base);
	S.base=NULL;
	return  OK;
}

Status ClearStack(SqStack &S)
{
	S.top=S.base;
	return  OK;
}

Status StackEmpty(SqStack S)
{
	if(S.top==S.base)  
		return  TRUE;
	else  
		return  FALSE;
}

int StackLength(SqStack S)
{
	if(!S.base)  return  ERROR;
	S.stacksize=S.top-S.base;
	return  S.stacksize;
}

Status GetTop(SqStack S,int &e)
{
	if(S.top==S.base) return ERROR;
	e=*(S.top-1);
	return e;
}

Status Push(SqStack &S,int e)
{
	if(S.top-S.base>=S.stacksize)
	{
		S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
		if(!S.base)  exit(OVERFLOW);
		S.top=S.base+S.stacksize;
		S.stacksize+=STACKINCREMENT;
	}
	*S.top++=e;
	return  OK;
}

Status Pop(SqStack &S,int &e)
{
	if(S.top==S.base) return ERROR;
	e=*--S.top;
	return e;
}

void main()
{   
	int i,j,e,*p;
	SqStack S;
	InitStack(S);
	if(S.base)
		cout<<"创建栈成功!"<<endl;
	cout<<"下面将插入元素!"<<endl;
	cout<<"请输入你要插入的元素的个数:";
	cin>>i;
	for(j=0;j<i;j++)
	{
		cout<<"请输入第"<<j+1<<"个数:";
		cin>>e;
		Push(S,e);
		cout<<endl;
	}
	cout<<"栈的长度是:"<<StackLength(S)<<endl;
	cout<<"下面将输出你输入后的栈!"<<endl;
	p=S.top;
	j=i;
	while(p!=S.base&&j!=0)
	{
		p--;
		cout<<"第"<<j<<"个元素是:"<<*p<<endl;
		j--;
	}
	cout<<"请输入你想要删除的元素个数:";
	cin>>i;
	while(i>StackLength(S))
	{
		cout<<"你的输入有误,请重新输入!"<<endl;
		cout<<"请输入你想要删除的元素个数:";
		cin>>i;
	}
	for(j=0;j<i;j++)
		cout<<"你删除的第"<<j+1<<"个元素是:"<<Pop(S,e)<<endl;
	if(!StackEmpty(S))
	{
	   cout<<"修改后的栈顶元素是:"<<GetTop(S,e)<<endl;
	   cout<<"下面将从栈顶到栈底输出修改后的栈!"<<endl;
	   p=S.top;
	   j=1;
	   while(p!=S.base)
	   {
		   p--;
		   cout<<"第"<<j<<"个元素是:"<<*p<<endl;
		   j++;
	   }
	}
	cout<<"下面将清空栈!"<<endl;
	ClearStack(S);
	if(StackEmpty(S))
		cout<<"清空栈成功!"<<endl;
	else
		cout<<"你的操作有误,栈未被清空!"<<endl;
	cout<<"下面将销毁栈!"<<endl;
	DestroyStack(S);
	if(!S.base)
		cout<<"销毁栈成功!"<<endl;
	else
		cout<<"你的操作有误,栈未被销毁!"<<endl;
	cout<<"程序结束!"<<endl;
}

/*程序结果
创建栈成功!
下面将插入元素!
请输入你要插入的元素的个数:5
请输入第1个数:1

请输入第2个数:2

请输入第3个数:3

请输入第4个数:4

请输入第5个数:5

栈的长度是:5
下面将输出你输入后的栈!
第5个元素是:5
第4个元素是:4
第3个元素是:3
第2个元素是:2
第1个元素是:1
请输入你想要删除的元素个数:2
你删除的第1个元素是:5
你删除的第2个元素是:4
修改后的栈顶元素是:3
下面将从栈顶到栈底输出修改后的栈!
第1个元素是:3
第2个元素是:2
第3个元素是:1
下面将清空栈!
清空栈成功!
下面将销毁栈!
销毁栈成功!
程序结束!
Press any key to continue*/










		
	







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -