数据结构2.1——栈

栈(stack)是限定仅在表尾进行插入或者删除的线性表,表尾端称为栈顶(top),表头端称为栈底(bottom)。栈有时又叫做先进后出的线性表,栈的基本操作有进栈(push)和出栈(pop),前者相当于插入,而后者则是删除最后插入的元素。如图


栈有两种存储方法:一种使用数组,另一种是使用单链表。

栈的顺序表示

typedef struct stack
{
	int top;
	int data[MAXSIZE];
}stack;


top用来指定栈顶元素在数组中的位置,栈存储的数据大小为MAXSIZE


顺序栈的进栈出栈

void push(stack *s,int e)
{
	if(s->top==MAXSIZE-1)
		return ;
	s->top++;
	s->data[s->top]=e;
	return ;
}

void pop(stack *s,int *e)
{
	if((s->top)==-1)
		return;
	*e = s->data[s->top];
	s->top--;
	return;
}

栈的单链表实现

链栈是没有附加头结点的运算受限的单链表,栈顶指针就是链表的头指针。



链栈的实现

typedef struct stackNode
{
	int  data;
	struct  stackNode *next;
}stackNode, *stackList;


链栈的进栈出栈

void push(stackList s,int e)
{
	stackList tmp;
	tmp  =(stackList)malloc(sizeof(stackNode));
	if(tmp==NULL)
		printf("Out of space");
	else
	{
	    tmp->data =e;
	    tmp->next=s->next;
	    s->next=tmp;
	}
	return ;
}

void pop(stackList s)
{
	stackList tmp;
	if(s->next==NULL)
		return;
	else
		{
			tmp=s->next;
			s->next=s->next->next;
			free(tmp);
		}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值