栈笔记

一、栈图解

 

二、基本概念

    栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

    栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。

    栈可以用来在函数调用的时候存储断点,做递归时要用到栈!

三、基本算法

1.进栈(PUSH)算法

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

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

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

2.退栈(POP)算法

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

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

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

四、结果

 

五、Code

stack.c

#include "stack.h"

void init_stack(t_stack * s)			
{
	s->top = -1;						// 初始化栈
}
int push(t_stack * s,char dat)
{
	if(s->top == (STACK_MAX_SIZE - 1))	// 栈满
		return STACK_ERR;
	(s->top)++;
	s->data[s->top] = dat;
	return STACK_OK;
}
int pop(t_stack * s,char *dat)
{
	if(s->top == -1)					// 栈空
		return STACK_ERR;
	*dat = s->data[s->top];
	(s->top)--;
	return STACK_OK;
}
int stack_test(void)
{
	char send_buf[8] = {"12345678"};
	char recv_buf[8];
	char i;
	t_stack s_stack;

	init_stack(&s_stack);			
	for(i = 0;i < 8; i++)
		push(&s_stack,send_buf[i]);			
	for(i = 0;i < 8; i++)
		pop(&s_stack,&recv_buf[i]);
	return 0;
}

stack.h

#ifndef _STACK_H_
#define _STACK_H_


#define STACK_MAX_SIZE	512
#define STACK_OK	0
#define STACK_ERR	-1

typedef struct{  
	char data[STACK_MAX_SIZE];	// 栈大小
	int top; 					// 栈顶
}t_stack,pt_stack; 

extern void init_stack(t_stack * s);	// 初始化栈
extern int push(t_stack * s,char dat);	// 入栈
extern int pop(t_stack * s,char *dat);	// 出栈
extern int stack_test(void);			// 测试函数

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值