☆ 顺序栈(Ordinal Stack)

Q点我可以进入"链栈"篇Q

首先说一下在顺序栈中,我个人觉得几个比较关键的地方:

  • 顺序栈的初始化
  • 栈中元素的表示法(数组+指针)

下面就直接放上代码,如以前一样,代码没有经过二次加工,适合参考与修改。

****************************************************************************************************************************************

 代码如下:

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
#define MAXSIZE 10

typedef int Status;
typedef int ElemType;

typedef struct node
{
	ElemType data[MAXSIZE];
	ElemType top;
}Stack;

void InitStack(Stack *s)                 //初始化,可以和链栈中的初始化结合分析理解
{
	s->top = -1;
}

Status Push(Stack *s,ElemType e)         //入栈
{
	if(s->top == MAXSIZE-1)
	{
		return FALSE;
	}
	s->top++;                            //在数据入栈前,首先将顶指针上移,指向0
	s->data[s->top] = e;
	return TRUE;
}

Status Pop(Stack *s,ElemType *e)          //出栈
{
	
	if(s->top == -1)                      //判断栈是否为空
	{
		printf("栈为空!\n");
		return FALSE;
	}
	while(s->top!=-1)                     /*循环全部出栈,如果想要自己判断出几个数据,可以省去这里的循环,再在主函数中添加一个循环即可*/
	{
		*e = s->data[s->top];
		printf("%d出栈\n",s->data[s->top]); 
		s->top--;
	}
	
	return TRUE;
}

Status TopStack(Stack *s,ElemType *e)        //栈首元素
{
	*e=s->data[s->top];
	return TRUE;
}

Status main()
{
	Stack *s,stack;
	s=&stack;
	ElemType e=0,i;
	InitStack(s);
	printf("初始化完成!\n");
	system("pause");
	printf("\n");
	
	for(i=1;i<=10;i++)
	{
		Push(s,i);
		printf("%d进栈\n",i);
	}
	system("pause");
	printf("\n");
	
	Pop(s,&e);
	system("pause");
	printf("\n");
	
	TopStack(s,&e);
	printf("栈顶元素为:%d",e);
}

这里就不再分析了,

如果有不懂的地方,可以在文章开头有关"链栈"的那一篇文章中查找思路与解析(大体上思路是一致的);

****************************************************************************************************************************************

             最快的脚步不是跨越,而是继续,最慢的步伐不是小步,而是徘徊。

****************************************************************************************************************************************

猜你喜欢

转载自blog.csdn.net/qq_42292831/article/details/81542047