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

📄 栈的顺序存储.cpp

📁 栈的顺序存储。通过C语言实现。是正确代码。需帐号下载。多谢合作。
💻 CPP
字号:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

typedef int selemtype;
int   ok=0;

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

void InitStack(SqStack *s)
{
	if (ok==1)
		printf("线性表以前已创建!\n");
	else {
	s->base = (selemtype *) malloc (STACK_INIT_SIZE *sizeof(selemtype));
	if(!s->base) exit(4);
	s->top=s->base;
	s->stacksize = STACK_INIT_SIZE;
	s->length=0;
	ok=1;
	printf("空栈已经建立!\n"); }
}

void destroystack(SqStack *s)
{
	free(s->base);
	s->base=s->top=NULL;
	s->stacksize=0;
	s->length=0;
	printf("空栈已经销毁!\n");
	ok=0;
}

void clearstack(SqStack *s)
{   
	if (s->top!=s->base) {
	s->base = (selemtype *) realloc (s->base,STACK_INIT_SIZE *sizeof(selemtype));
	s->top=s->base;
	s->length=0;
	s->stacksize = STACK_INIT_SIZE;}
	printf("栈已经为空!\n");
}

void judgestack(SqStack *s)
{
	if (s->base==s->top)
		printf("栈为空!\n");
	else printf("栈不是空的!\n");
}

void getlength(SqStack *s)
{ 
	printf("栈的元素个数为:%d\n",s->length);
}

void gettop(SqStack *s)
{   
	int e=0;
	if (s->base == s->top)
		printf("空栈!\n");
	else 
		 printf("栈顶元素为:%d\n",e=*(s->top-1));
}

void push(SqStack *s,int e)
{
	if(s->top - s->base>=s->stacksize) {
		s->base = (selemtype *) realloc (s->base,STACKINCREMENT *sizeof(selemtype));
		if(!s->base) exit (2);
		s->top=s->base + s->stacksize;
		s->stacksize +=STACKINCREMENT;
			}
	*s->top++ = e;
	++(s->length);
	printf("已经插入栈顶!\n");
}

void pop(SqStack *s)
{
	int e;
	if(s->top==s->base)
		printf("栈是空的!\n");
	else {		
          e= * --s->top;
		printf("栈顶元素%d已经删除!\n",e);
		  --(s->length);
		  }
}

void visits(SqStack *s)
{
	int *v;
	if(s->top==s->base)
		printf("栈是空的!\n");
	else {
		  	printf("栈底:");
			for (v=s->base;v!=s->top;v=v+1) 
			    printf("%d->",*v);
				printf("栈顶!\n");
		}
}
int main()
{
	int a,e;
    SqStack s;
	printf("栈的顺序储存结构程序!\n");
	do {
		printf("				 1  创建一个空栈\n");
		printf("				 2  销毁栈\n");
		printf("				 3  重置栈为空\n");
		printf("				 4  判断栈是否为空\n");
		printf("				 5  读取栈的数据元素个数\n");
		printf("				 6  读取栈顶元素\n");
		printf("				 7  插入新元素作为新的栈顶\n");
		printf("				 8  删除栈顶元素\n");
		printf("				 9  读取从栈底到栈顶的每一个数据元素\n");
		printf("				 0 退出程序\n");
	    printf("请输入你的选择?");
		scanf("%d",&a);
		if( ok==0&&(a!=1&&a!=0)) 
			printf("多项式还没建立,你必须先建立,麻烦合作!\n");
		else {
		  switch (a) {
			case 1:
				  InitStack(&s);
				  break;
			case 2:
				 destroystack(&s);
				  break;
			case 3:
				  clearstack(&s);
				  break;
			case 4:
				  judgestack(&s);
				  break;
			case 5:
				  getlength(&s);
				  break;
			case 6:
				   gettop(&s);
				   break;
			case 7:
				  printf("请输入你要插入的元素:");
				  scanf("%d",&e);
				  push(&s,e);
				  break;
			case 8:
                     pop(&s);
					 break;
			case 9:
				   visits(&s);
				   break;
			case 0:
				  printf("谢谢使用,欢迎你下次光临!\n");
				  break;
			default:
				  printf("错误输入,请你看准再选择!\n");
				  break;
		}
		}
	}while (a!=0);
	return 0;
}

⌨️ 快捷键说明

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