您的当前位置:首页正文

数据结构·实现顺序栈的基本操作,包括:初始化栈,进栈,出栈,取栈顶元素。

2024-11-09 来源:个人技术集锦

1)顺序栈的元素个数可随意设定;
2)可连续测试任意多个元素的进栈、出栈操作;
3)可实现取栈顶元素;
4)任一操作结束后将顺序栈中的内容输出;5)可由用户选择退出程序。

#include <iostream>
#include <stdio.h>
#include <malloc.h>
#define  MAX 50
typedef int datatype;

typedef struct
{
	datatype stack[MAX];
	int top;
}seqstack;

void initiate(seqstack** s);
int  push(seqstack* s, int n);
int  pop(seqstack* s, int n);
int  stacktop(seqstack* s);
void print(seqstack* s);

int main()
{
	seqstack* s;
	int sel, n;    /* sel 选择输入, n 进栈或出栈数据的个数*/
	initiate(&s);
	printf("完成初始化 !\n");
	printf("请输入你的选择: 1--initiate 2--push 3--pop 4--stacktop 5--print 6--exit\nyour choice =");
	scanf("%d", &sel);
	while (sel != 6)
	{
		if (sel == 1)
		{
			initiate(&s);
			printf("完成初始化 !\n");
		}
		else if (sel == 2)
		{
			printf("请输入待进栈的数据个数:");
			scanf("%d", &n);
			push(s, n);
			print(s);
		}
		else if (sel == 3)
		{
			printf("请输入待出栈的数据个数:");
			scanf("%d", &n);
			pop(s, n);
			print(s);
		}
		else if (sel == 4)
		{
			stacktop(s);
			print(s);
		}
		else if (sel == 5)
			print(s);
		else
			printf("你的选择是错误的!\n ");
		printf("请输入你的选择: 1--initiate 2--push 3--pop 4--stacktop 5--print 6--exit\nyour choice =");
		scanf("%d", &sel);
	}
	return 1;
}

/*初始化*/
void initiate(seqstack** s)
{
	*s = (seqstack*)malloc
	(sizeof(seqstack));
	(*s)->top = -1;
}

/*进栈*/
int push(seqstack* s, int n)
{
	datatype x;
	while (n)
	{
		if (s->top == MAX - 1)
		{
			printf("栈已满!\n");
			return 0;
		}
		else
		{
			printf("\n 请输入进栈元素的的数值 \n");
			scanf("%d", &x);
			s->top++;
			s->stack[(s->top)] = x;
			n--;
		}
	}
	printf("进栈完成!\n");
	return 1;
}

/*出栈*/
int  pop(seqstack* s, int n)
{
	datatype x;
	while (n)
	{
		if (s->top == -1)
		{
			printf("栈空!\n");
			return 0;
		}
		else
		{
			x=s->stack[(s->top)];
			s->top--;
			n--;
		}
	}
	printf("出栈完成!\n");
	return 1;
}

/*取栈顶元素*/
int stacktop(seqstack* s)
{
	datatype x;
	if (s->top == -1)
	{
		printf("栈空!\n");
		return 0;
	}
	x = (s->stack[(s->top)]);
	printf("栈顶数据为:%d\n", x);
	return 1;
}

/*显示输出*/
void print(seqstack* s)
{
	int i;
	if (s->top == -1)
		printf("栈空!\n");
	else
		for (i = 0; i <= s->top; i++)
			printf("stack[%d]为:%d\n", i, s->stack[i]);
}
Top