C语言 数据结构之顺序栈(基本操作)

本文只涉及单链表的基本操作,由于本人是初学者所以相关排序和查找等算法后期更新。
本文所含操作有:

  1. 顺序栈的初始化
  2. 顺序栈的入栈
  3. 顺序栈的出栈
/****顺序栈test****/
#include
#include
#include
#define Maxsize 10
typedef int ElemType;
typedef int Status;
typedef struct Stack{
	ElemType StackSize;
    ElemType *top,*base;
}StackList;
//初始化
Status initList(StackList &s){
	s.base=new ElemType[Maxsize];
	if(!s.base){
		printf("初始化失败!\n");
		return 0;
	}
	else{
	s.top=s.base;
	s.StackSize=Maxsize;
	return 1;
	}
}
//判断栈是否为空
Status EmptyStack(StackList &s,ElemType &e){
        if(s.top==s.base)
		{printf("栈已空!\n");return 0;}
		else
		{e=*--s.top;return 1;}
}
//出栈
void PopElem(StackList &s){
      ElemType e;
	  int n,flag;
	  printf("请输入出栈个数:");
	  scanf("%d",&n);
	  for(int i=0;i<n;i++){
		  flag=EmptyStack(s,e);
          if(flag)printf("%d\t该元素已出栈!\n",e);
		  else
		  break;
	  }
}
//判断栈是否溢出
Status judgeStack(StackList &s,ElemType e){
       if(s.top-s.base==Maxsize)
	  {printf("栈已满!\n");return 0;}
	   else
	   {*(s.top++)=e;return 1;}
}
//入栈
void PushElem(StackList &s){
    ElemType e;
	int n,flag;
	printf("请输入入栈个数:");
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		printf("请输入数字:");
		scanf("%d",&e);
		flag=judgeStack(s,e);
		if(flag){printf("该元素已栈!\n");}
		else
		break;
	}
}
//获得栈顶元素
void gettop(StackList &s){
	 ElemType e;
	 if(s.top==s.base)
	 printf("栈顶为空!!\n");
	 else
	 {
	 e=*--s.top;
     printf("栈顶为:%d\n",e);
	 *(s.top++)=e;
	 }
}
//菜单
void mune(){
	printf("*—————————————————————操作代码———————————————————————*\n");
	printf("入栈————1\t出栈————2\t获得栈顶————3\t退出————0\n");
	printf("*—————————————————————操作代码———————————————————————*\n");
}
int main(){
	int choice;
    StackList s;
	initList(s);
	while(1){
          mune();
		  printf("请输入操作代码:");
		  scanf("%d",&choice);
		  if(choice==0)break;
		  switch(choice){
			  case 1:PushElem(s);break;
			  case 2:PopElem(s);break;
			  case 3:gettop(s);break;
			  default : printf("操作代码不在范围内!\n");
		  }
	}
	return 0;
}

你可能感兴趣的:(笔记,c语言,数据结构,开发语言)