利用数组存放的顺序栈

发布于 2012-05-15  857 次阅读


顺序栈两种约定:
1.POP指向栈顶上一位,判断栈满就用POP==MAXSIZE-1。
2.POP指向栈顶,判断栈满就用POP==MAXSIZE。
学校老师示例的Sourcecode,感觉核心函数很简练,所以Mark下来了。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define Maxsize 10
struct SStack
{
	int data[Maxsize];
	int top;
};

struct SStack *Init_SeqStack()
{
	struct SStack *s;
	s=(struct SStack *)malloc(sizeof(struct SStack));
	s->top=-1;
	return s;
}

int Empty_SeqStack(struct SStack *s)//判断栈空
{
	if(s->top==-1)
		return 1;
	else
		return 0;
}

int Full_SeqStack(struct SStack *s)
{
	if(s->top==Maxsize-1)
		return 1;
	else
		return 0;
}

int Push_SeqStack(struct SStack *s,int x)
{
	if(Full_SeqStack(s))
	{
		printf("栈已满,%d及以后的数据无法入栈\n",x);
		return 0;
	}
	else
	{
		s->top++;
		s->data[s->top]=x;
		return 1;
	}
}

int Pop_SeqStack(struct SStack *s,int *y)//出栈
{
	if(Empty_SeqStack(s))
	{
		printf("\n栈已空!\n");
		return 0;
	}
	else
	{
		*y=s->data[s->top];
		s->top--;
		return 1;
	}
}

int main(int argc, char* argv[])
{
	int i,y,t,*c;
	struct SStack *p;
	p=Init_SeqStack();
	printf("输入想要入栈的整形量(以0结束):\n");
	scanf("%d",&y);
	while(Push_SeqStack(p,y))
	{
		scanf("%d",&y);
	}
	while(Pop_SeqStack(p,&t))
	{
		printf("%d ",t);
	}
	printf("\n再出栈一次\n");
	fflush(stdin);
	getchar();
	Pop_SeqStack(p,&t);
	system("pause");
	return 0;
}

届ける言葉を今は育ててる
最后更新于 2012-05-15