C语言数据结构之顺序栈

C语言数据结构之顺序栈

tips:前些天学习了顺序表的一系列操作,今天来看看C语言数据结构之顺序栈的实现以及关于顺序栈的各种操作。


栈的特点是先进后出,后进先出,在数组中可利用一个指向数组下标指针top来进行顺序栈的相关操作。


首先我们定义一个顺序栈的结构体

#define MaxSize 10 //给顺序栈定义默认大小

typedef struct {
	int data[MaxSize];//静态数组存放栈中元素
	int top;//栈顶指针(数组下标)

}Stack,*pStack;

准备栈中元素打印输出函数

//打印栈中元素
void print_Stack(pStack s)
{
	if (s->top == -1)
	{
		printf("栈空!\n");
	}
	else
	{
		for (int i = 0; i <= s->top; i++)
		{
			printf("%d\n", s->data[i]);
		}
	}
	printf("-------------------------------------------\n");
}

1、栈的初始化(InitStack)

//初始化栈
void InitStack(pStack s)
{
	s->top = -1;//初始化时候,栈中还没有元素,先让top为-1
}

2、入栈(push)

思路:

  • 当栈已满时,不予入栈;
  • 当栈未满时,将栈顶指针top+1,并入栈;

具体实现:

//入栈
void push(pStack s, int e)
{	
	if (s->top == MaxSize - 1) 
	{
		//栈满
		printf("栈满!\n");
	}
	else
	{
		s->top++;
		s->data[s->top] = e;
	}	
}

3、出栈(pop)

思路:

  • 当栈空时,不予出栈;
  • 当栈非空时,出栈(栈顶指针下移)=>top-1;

具体实现:

//出栈
void pop(pStack s)
{
	if (s->top == -1)
	{
		printf("栈空!\n");
	}
	else
	{
		s->top--;
	}
}

4、返回栈顶元素(GetTop)

思路:

  • 当栈空时,返回0;
  • 当栈非空时,返回data[top];

具体实现:

//返回栈顶元素
int GetTop(pStack s)
{
	if (s->top == -1)
	{
		//栈空
		return 0;
	}
	else
	{
		return s->data[s->top];
	}
}

5、判断栈空(StackEmpty)

思路:

  • 当栈顶指针的值为-1时,栈为空,返回1;
  • 栈非空时,返回0;

具体实现:

//判断栈空
int StackEmpty(pStack s)
{
	if (s->top == -1)
	{
		//栈空
		return 1;
	}
	else
	{
		return 0;
	}
}

到此我们就完成了顺序栈的基本操作,还是很简单的! 下面在main()函数中测试一下:
int main()
{
	Stack sta;//定义栈
	pStack s = &sta;

	int e;//入栈的元素
	char panduan;//判断出栈

	//初始化栈
	InitStack(s);

	//入栈
	while (scanf("%d",&e) != EOF)
	{
		push(s, e);
	}
	print_Stack(s);

	//返回栈顶元素并且判断栈是否为空
	if (StackEmpty(s))
	{
		printf("栈空!\n");
	}
	else
	{
		printf("栈顶元素:%d\n", GetTop(s));
	}

	//出栈
	while (printf("是否出栈?(y/n):"), scanf("%c", &panduan))
	{
		if (panduan == 'n')
		{
			break;
		}
		else if(panduan == 'y')
		{
			//出栈
			pop(s);

			//返回栈顶元素并且判断栈是否为空
			if (StackEmpty(s))
			{
				printf("栈空!\n");
			}
			else
			{
				printf("栈顶元素:%d\n", GetTop(s));
			}

			print_Stack(s);
		}
	}


	return 0;
}

测试结果:
在这里插入图片描述


希望对大家的学习能够有所帮助,加油!
tips:世上没有白费的努力,更没有碰巧的成功,不要揠苗助长,不要急于求成,只要一点一点去做,一步步去走,成功,不过是水到渠成。

猜你喜欢

转载自blog.csdn.net/wrlovesmile/article/details/108106212