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

📄 lqueu.h

📁 一些基本的数据结构
💻 H
字号:
/***********************队列,置队空、入队和出队********2008.2.6*********************/
#include<stdio.h>
#include<process.h>
#include<malloc.h> 
/******************************状态代码*********************************/
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define STACK_INIT_SIZE 10 
#define STACKINCREMENT 2
/*******************链式存储结构***************************/
typedef int Status;
typedef int QElemType;

typedef struct QNode
{
   QElemType data;
   struct QNode *next;
}QNode,*QueuePtr;

typedef struct
{
   QueuePtr front,rear; 
}LinkQueue;
/****************************************************/
/*****************基本操作函数***********************/
/*********构造空队*******/
Status InitQueue(LinkQueue *Q)
{ 
   (*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
   if(!(*Q).front)
     exit(OVERFLOW);
   (*Q).front->next=NULL;
   return OK;
}
/******清空队链*********/
Status ClearQueue(LinkQueue *Q)
{ 
   QueuePtr p,q;
   (*Q).rear=(*Q).front;
   p=(*Q).front->next;
   (*Q).front->next=NULL;
   while(p)
   {
     q=p;
     p=p->next;
     free(q);
   }
   return OK;
}
/**********队列长度********/
int QueueLength(LinkQueue Q)
{ 
   int i=0;
   QueuePtr p;
   p=Q.front;
   while(Q.rear!=p)
   {
     i++;
     p=p->next;
   }
   return i;
}
/*********销毁队列********/
Status DestroyQueue(LinkQueue *Q)
{ 
   QueuePtr p;
   int k=QueueLength(*Q);
   while(k--)
   {
     p=(*Q).rear->next;
	 free((*Q).rear);
	 (*Q).rear=p;
   }
   return OK;
}
/**********查看队尾元素********/
Status GetRear(LinkQueue Q,QElemType *e) 
{ 
   if(Q.front==Q.rear)
     return ERROR;
   *e=Q.rear->data;
   return OK;
}
/**********元素入队********/
Status EnQueue(LinkQueue *Q,QElemType e)
{ 
   QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
   if(!p) 
     exit(OVERFLOW);
   p->data=e;
   p->next=NULL;
   (*Q).rear->next=p;
   (*Q).rear=p;
   (*Q).rear->next=(*Q).front;
   return OK;
}
/**********元素出队********/
Status DeQueue(LinkQueue *Q,QElemType *e)
{ 
   QueuePtr p;
   if((*Q).front==(*Q).rear)
     return ERROR;
   p=(*Q).front->next;
   *e=p->data;
   (*Q).front->next=p->next;
   if((*Q).rear==p)
     (*Q).rear=(*Q).front;
   free(p);
   return OK;
}

/******访问函数********/

Status QueueTraverse(LinkQueue Q)
{ 
   QueuePtr p;
   int k=0;
   k=QueueLength(Q);
   p=Q.front->next;
   while(k)
   {
     printf("%d ",p->data);//visit();//
     p=p->next;
	 k--;
   }
   printf("\n");
   return OK;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -