顺序栈

顺序栈和顺序表基本相同,所以就当复习了

#include<stdio.h>
#include<stdlib.h> 
#define maxsize 30
int i;
typedef int datatype;
typedef struct{
	datatype *data;
	int top;
}SeqStack; 

int Initial(SeqStack *S){
	S->data = (datatype*)malloc(maxsize*sizeof(datatype));
	if(!S->data){
		printf("内存分配失败");
		exit(1); 
	}
	int x;
	printf("请输入元素"); 
	scanf("%d",&x);
    while(x!=0){
		S->data[++S->top] = x;
		scanf("%d",&x);
		if(S->top>maxsize){
			return 0;
		}
		}
		return 1;
}

datatype Gettop(SeqStack *S){
	if(S->top==-1)
		return 0;
	return S->data[S->top];
} 

int length(SeqStack *S){
	return  S->top+1;
}

void show(SeqStack *S){
	int i;
	for(i = 0;i<=S->top;i++){
		printf("栈中第%d个元素为:\n",i+1);
		printf("%d\n",S->data[i]);
	}
}

int Isfull(SeqStack *S){
	return S->top==maxsize-1;
}

int Isempty(SeqStack *S){
	  return S->top==-1;
}

int Push(SeqStack *S,datatype x){
	if(S->top == maxsize-1)
	   return 0;
	   S->data[++S->top] = x;
	   return 1;
}

int Pop(SeqStack *S){
	if(S->top==-1)
	  return 0;
	S->top--;
	return 1;
}

int DestroyStack(SeqStack *S){
	S->top = -1;
	return 1;
}
void menu(SeqStack *S)
{
  	system("cls");
  	printf("\n\n\n\n");
  	printf("\t\t|---------------顺序栈--------------------------|\n");
  	printf("\t\t|\t\t\t\t\t        |\n");
  	printf("\t\t|\t\t 1.顺序栈初始化 \t        |\n");
  	printf("\t\t|\t\t 2.顺序栈的栈顶元素\t        |\n");
  	printf("\t\t|\t\t 3.顺序栈的长度\t                |\n");
  	printf("\t\t|\t\t 4.遍历顺序栈\t                |\n");
 	printf("\t\t|\t\t 5.判断顺序栈是否满栈\t        |\n");
 	printf("\t\t|\t\t 6.判断顺序栈是否为空\t        |\n");
  	printf("\t\t|\t\t 7.进栈\t                        |\n");
  	printf("\t\t|\t\t 8.出栈\t                        |\n");
  	printf("\t\t|\t\t 9.摧毁顺序栈\t                |\n");
    printf("\t\t|\t\t\t\t\t        |\n");
  	printf("\t\t|-----------------------------------------------|\n\n");
  	printf("\t\t\t请选择(1-9):");
  	int n;
	scanf("%d",&n);
  	switch(n){
  		case 1:
  		system("cls");
		  if(Initial(S))
		    printf("初始化成功\n");
		  printf("按任意键返回菜单....");	
		  getchar();
		  getchar();
		  menu(S);
  		case 2:
  			system("cls");
  			 if(!Gettop(S))
  			   printf("栈空"); 
  		    else
  		       printf("栈顶元素为:%d\n",Gettop(S));
  		  printf("按任意键返回菜单....");	
		  getchar();
		  getchar();
		  menu(S);
  		case 3:
  			system("cls");
  			  printf("栈的长度为:%d\n",length(S));
  		  printf("按任意键返回菜单....");	
		  getchar();
		  getchar();
		  menu(S);
  		case 4:
  			system("cls");
  			show(S);
		  printf("按任意键返回菜单....");	
		  getchar();
		  getchar();
		  menu(S);
  	    case 5:
  	    	system("cls");
  	    	  if(Isfull(S))
  	    	     printf("栈满");
  	    	  else
  	    	     printf("栈未满");
  	      printf("按任意键返回菜单....");
		  getchar();
		  getchar();
		  menu(S);
  	    case 6:
  	    	system("cls");
  	    	  if(Isempty(S))
  	    	    printf("栈空\n");
  	    	  else
				printf("栈不为空\n");  
		  printf("按任意键返回菜单....");	
		  getchar();
		  getchar();
		  menu(S); 
		case 7:
		    system("cls");
		    printf("请输入进栈元素:\n");
  	    	scanf("%d",&i);
		     if(Push(S,i))
			    printf("进栈成功\n");
			 else
			    printf("栈满,进栈失败\n");
		  printf("按任意键返回菜单....");	
		  getchar();
		  getchar();
		  menu(S);
		case 8:
			system("cls");
			 if(Pop(S))
			   printf("出栈成功\n"); 
			else
			   printf("栈空,请先初始化\n");
		  printf("按任意键返回菜单....");	
		  getchar();
		  getchar();
		  menu(S);
		case 9:
		   system("cls"); 
		   if(DestroyStack(S))
		     printf("摧毁成功");
		  printf("按任意键退出程序....");	
		  getchar();
		  getchar();
		  exit(1);	
  		} 
		  }
  		
int main(){
	int i;
	SeqStack *S;
	S = (SeqStack *)malloc(sizeof(SeqStack));
	S->top = -1;
    menu(S);
}
posted @ 2019-04-22 22:45  18软工2班苏炎  阅读(126)  评论(0编辑  收藏  举报