stack

【FROM:INTERNET 百科 && 维基百科】

进栈(PUSH)算法:

①若TOP≥n时,则给出溢出信息,作出错处理(push前首先检查栈是否已满,满则溢出;不满则作②);

②置TOP=TOP+1(栈指针加1,指向进栈地址);

③S(TOP)=X,结束(X为新进栈的元素);


退栈(POP)算法

①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);

②X=S(TOP),(退栈后的元素赋给X):

③TOP=TOP-1,结束(栈指针减1,指向栈顶)。

DEMO:FROM 百科

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

#define MAXSIZE 1024
/*define struct*/
typedef struct
{
	int data[MAXSIZE];
	int top;
}SeqStack;

/*init struct*/
SeqStack *Init_SeqStack()
{
	SeqStack *s;
	s=(SeqStack *)malloc(sizeof(SeqStack));
	if (!s)
	{
		printf("空间不足\n");
		return NULL;
	}
	else
	{
		s->top=-1;
		return s;
	}
}

/*if stack is empty */
int Empty_SeqStack(SeqStack *s)
{
	if (s->top == -1)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
/*push operator*/
int Push_SeqStack(SeqStack *s,int x)
{
	if (s->top == MAXSIZE-1)
	{
		printf("Stack Full\n");
		return 0;
	}
	else
	{
		s->top++;
		s->data[s->top]=x;
		return 1;
	}
}
/*pop operator*/
int Pop_SeqStack(SeqStack *s,int *x)
{
	if (Empty_SeqStack(s))
	{
		printf("Stack Empty \n");
		return 0;
	}
	else
	{
		*x=s->data[s->top];  //top element into *x
		s->top--;
		return 1;
	}
}
/*Get top element*/
int Top_SeqStack(SeqStack *s)
{
	if (Empty_SeqStack(s))
	{
		printf("Stack Empty \n");
		return 0;
	}
	else
	{
		return s->data[s->top];
	}
}
/*print SeqStack*/
int Print_SeqStack(SeqStack *s)
{
	int i;
	printf("当前栈中的元素:\n");
	for (i=s->top;i>=0;i--)
	{
		printf("%3d",s->data[i]);
	}
	printf("\n");
	return 0;
}
int main(void)
{
	SeqStack *L;
	int n;  //入栈元素个数
	int element_value;
	int m;
	int i;
	L=Init_SeqStack();
	printf("STACK初始化完成\n");
	printf("栈空:%d\n",Empty_SeqStack(L));
	printf("请输入入栈元素个数:\n");
	scanf("%d",&n);
	printf("请输入要入栈的%d个元素:\n",n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&element_value);
		Push_SeqStack(L,element_value);
	}
	Print_SeqStack(L);
	printf("栈顶元素:%d\n",Top_SeqStack(L));
	printf("\n============================================\n");
	printf("请输入要出栈的元素个数(不能超过%d个):\n",n);
	scanf("%d",&n);
	printf("依次出栈的%d个元素:\n",n);
	for(i=0;i<n;i++)
	{
		Pop_SeqStack(L,&m);
		printf("%3d",m);
	}
	printf("\n");
	Print_SeqStack(L);
	printf("栈顶元素:%d\n",Top_SeqStack(L));

	getch();
	return 0;
}


DEMO:push operator && pop operator 

FROM:维基百科

typedef struct
{
	size_t size;
	int array[STACK_MAXSIZE];
}STACK;

void push(STACK *ps,int x)
{
	if (ps->SIZE == STACK_MAXSIZE)
	{
		fputs("overflow\n",stderr);
		abort();
	}
	else
	{
		ps->array[ps->size++]=x;
	}
}

int pop(STACK *ps)
{
	if (ps->size ==0)
	{
		fputs("underflow\n",stderr);
		abort();
	}
	else
	{
		return ps->array[--ps->size] ;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值