⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.h

📁 一个功能强大的栈
💻 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 + -