C语言栈的顺序存储结构操作(结构定义、初始化、入栈、出栈、长度等)

 1、顺序栈:利用顺序存储方式表示的栈。

2、栈中的数据元素可用一维数组来实现:datatype data[MAXSIZE],栈底位置可以设置数组的任意端点,栈顶则是随着入栈、出栈(插入和删除)而变化的,通常以下表0的一端表示栈底,用一个位置指针top作为栈顶。


#include
#include
#include  //用户通过键盘产生对应操作 
#define MAXSIZE 20

#define datatype char
//结构定义 
typedef struct
{
	datatype data[MAXSIZE];
	int top;
}SeqStack;
//初始化
void InitStack(SeqStack *s)
{
	s->top=-1;
}
//入栈
int Push(SeqStack*s,datatype x)
{
	if(s->top==MAXSIZE-1)  //栈满,不能入栈 
		return 0;
	else 
	{
		s->top++;
		s->data[s->top]=x;  //插入数据元素X赋值给栈顶空间 
		return 1;
	}
}
//出栈
int Pop(SeqStack*s,datatype*x)
{
	if(s->top==-1)     //空栈不能出栈 
		return 0;
	else
	{
		*x=s->data[s->top];  //栈顶元素存入*x 
		s->top--;
		return 1;
	}
}
//求长度
int Len(SeqStack*s)
{
	int length;
	length=s->top+1;
	return length;
} 
//取栈顶元素
int GetTop(SeqStack*s,datatype*x)
{
	if(s->top==-1)
		return 0;
	*x=s->data[s->top];
	return 1;
} 
//菜单页面
char menu(void)
{
	char ch;
	printf("    顺序栈操作\n   ");
	printf("-----------------\n");
	printf("   选择操作选项\n  ");
	printf("      0.初始化\n    ");
	printf("    1.入栈\n      ");
	printf("  2.出栈\n        ");
	printf("3.取栈顶元素\n   ");
	printf("     4.长度\n    ");
	printf("    5.退出\n        ");
	printf("-----------------\n");
	printf("输入选项:");
	ch=getchar();
	return(ch);
} 

void main()
{
	SeqStack st;
	int l,k,flag=1;
	datatype x;
	char choice;
	InitStack(&st);
	do{ choice=menu();
	switch(choice)
	{
		case'0':
			InitStack(&st);
			printf("初始化成功!\n");
			getchar();
			break;
		case'1':
			printf("请输入入栈数据:");
			scanf("%d",&x);
			k=Push(&st,x);
			if(k)  printf("入栈成功!\n");
			else printf("栈已满!\n");
			getchar();
			break;
		case'2':
			k=Pop(&st,&x);
			if(k)  printf("出栈数据=%d\n",x);
			else printf("栈为空!\n"); 
			getchar();
			break;
		case'3':
			k=GetTop(&st,&x);
			if(k)  printf("栈顶元素=%d\n",x);
			else printf("栈为空!\n"); 
			getchar();
			break; 
		case'4':
			l=Len(&st);
			printf("长度为:%d\n",l);
			getchar();
			break;
		case'5':flag=0;break;		
	 }
	
	}while(flag==1);
}

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