📄 stack.h
字号:
/*作者:华南理工大学 零壹工作室
email:01_mental@163.com*/
#include "malloc.h"
#define NULL 0
#define bsize 20
#define PUSH(var,head) { stack_ch=(byte *)(&var);\
for(stack_i=0;stack_i<sizeof(var);stack_i++)\
pusha(stack_ch[stack_i],head);}\
#define POP(var,head) {stack_ch=(byte *)(&var); \
for(stack_i=sizeof(var)-1;stack_i>=0;stack_i--)\
stack_ch[stack_i]=popa(head);}\
/*以上f是任一类型的变量,注意f必须是变量。head的类型为stack_info的指针,
是指向下文所建的栈的栈顶的一个头结点*/
typedef unsigned char byte;/*定义一个字节*/
#define datetype byte
typedef struct t{
datetype date[bsize];
struct t *next;
}estack;/*定义一顺序表的数据结构,date为容量为bsize,类型为datetype的一个数组,next指向下一个顺序表的地址*/
typedef struct s{
estack *stack_top;
int pos;
int estack_num;
}stack_info;/*定义顺序链表的头结点,stack_top指向栈顶所在的顺序表的地址,pos为stack_top的栈顶的位置,estack_num为顺序表的个数*/
byte *stack_ch;int stack_i;/*为PUSH,POP两宏定义两个变量*/
int empty(stack_info *s)
{
if(s->pos==-1&&s->estack_num==1)return 1;
return 0;
}
stack_info *creat()
{
estack *top;
stack_info *head;
head=(stack_info *)malloc(sizeof(stack_info));
top=(estack *)malloc(sizeof(estack));
head->stack_top=top;
top->next=NULL;
head->pos=-1;
head->estack_num=1;
return head;
}
pusha(datetype x,stack_info *head)
{
estack *one;
if(head->pos==bsize-1)
{
one=(estack *)malloc(sizeof(estack));
one->next=head->stack_top;
head->stack_top =one;
head->stack_top->date[0]=x;
head->pos=0;
head->estack_num++;
}
else head->stack_top->date[++head->pos]=x;
}
datetype popa(stack_info *head)
{ estack *one;
if(empty(head)){printf("empty");return 0;}
if(head->pos==-1)
{
one=head->stack_top;
head->stack_top=one->next;
free(one);
head->estack_num--;
head->pos=bsize-2;
return head->stack_top->date[bsize-1];
}
else return head->stack_top->date[head->pos--];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -