作者在 2010-05-15 22:00:23 发布以下内容
/链队列
//链队列的类型结构定义
typedef LinkList QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
int length;
}Queue;
//构造空队列Q
void InitQueue(Queue &Q)
{
Q.front=Q.rear=new ListNode;
if(!Q.front) exit(1);
Q.front->next=NULL;
Q.length=0;
}
//在队尾插入元素 e
void EnQueue(Queue &Q,DataType e)
{
s=new ListNode;
if(!s) exit(1);
s->data=e; s->next=NULL;
Q.rear->next=s;
Q,rear=s;
++Q.length;
}
//删除操作
bool DeQueue(Queue &Q,DataType &e)
{
if(Q.front==Q,rear)
return FALSE;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return TRUE;
}
循环队列
循环队列的结构*/
#define MAXNUM 20
typedef int DataType;
typedef struct SeqQueue
{
int f;
int r;
DataType q[MAXNUM];
} SeqQueue,*PSeqQueue;
/*/构造一个最大储存空间为maxsize的空队列paqu*/
PSeqQueue creatEmptyQueue_seq(void)
{
PSeqQueue paqu=(PSeqQueue)malloc(sizeof(SeqQueue));
if(paqu==NULL)
printf("Out of space!!\n");
else
paqu->f=paqu->r=0;
return (paqu);
}
/*/判空*/
int isEmptyQueue_seq(PSeqQueue paqu)
{
return paqu->f==paqu->r;
}
/*/判满/*/
int isFullQueue_seq(PSeqQueue paqu)
{
return(paqu->r+1)%MAXNUM==paqu->f;
}
/*/在队列中插入一元素*/
void enQueue_seq(PSeqQueue paqu,DataType x)
{
if((paqu->r+1)%MAXNUM==paqu->f)
printf("Full queue!!\n");
else
{
paqu->q[paqu->r]=x;
paqu->r=(paqu->r+1)%MAXNUM;
}
}
/*/删除队列头部元素*/
void deQueue_seq(PSeqQueue paqu)
{
if(paqu->f==paqu->r)
printf("Empty Queue!!\n");
else
{
paqu->f=(paqu->f+1)%MAXNUM;
}
}
/*/求队列头部元素*/
DataType frontQueue_seq(PSeqQueue paqu)
{
if(paqu->f==paqu->r)
return 0;
else
return (paqu->q[paqu->f]);
}
/*/求队列的长度*/
int QueueLength(PSeqQueue paqu)
{
return ((paqu->r-paqu->f+MAXNUM)%MAXNUM);
}
//链队列的类型结构定义
typedef LinkList QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
int length;
}Queue;
//构造空队列Q
void InitQueue(Queue &Q)
{
Q.front=Q.rear=new ListNode;
if(!Q.front) exit(1);
Q.front->next=NULL;
Q.length=0;
}
//在队尾插入元素 e
void EnQueue(Queue &Q,DataType e)
{
s=new ListNode;
if(!s) exit(1);
s->data=e; s->next=NULL;
Q.rear->next=s;
Q,rear=s;
++Q.length;
}
//删除操作
bool DeQueue(Queue &Q,DataType &e)
{
if(Q.front==Q,rear)
return FALSE;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return TRUE;
}
循环队列
循环队列的结构*/
#define MAXNUM 20
typedef int DataType;
typedef struct SeqQueue
{
int f;
int r;
DataType q[MAXNUM];
} SeqQueue,*PSeqQueue;
/*/构造一个最大储存空间为maxsize的空队列paqu*/
PSeqQueue creatEmptyQueue_seq(void)
{
PSeqQueue paqu=(PSeqQueue)malloc(sizeof(SeqQueue));
if(paqu==NULL)
printf("Out of space!!\n");
else
paqu->f=paqu->r=0;
return (paqu);
}
/*/判空*/
int isEmptyQueue_seq(PSeqQueue paqu)
{
return paqu->f==paqu->r;
}
/*/判满/*/
int isFullQueue_seq(PSeqQueue paqu)
{
return(paqu->r+1)%MAXNUM==paqu->f;
}
/*/在队列中插入一元素*/
void enQueue_seq(PSeqQueue paqu,DataType x)
{
if((paqu->r+1)%MAXNUM==paqu->f)
printf("Full queue!!\n");
else
{
paqu->q[paqu->r]=x;
paqu->r=(paqu->r+1)%MAXNUM;
}
}
/*/删除队列头部元素*/
void deQueue_seq(PSeqQueue paqu)
{
if(paqu->f==paqu->r)
printf("Empty Queue!!\n");
else
{
paqu->f=(paqu->f+1)%MAXNUM;
}
}
/*/求队列头部元素*/
DataType frontQueue_seq(PSeqQueue paqu)
{
if(paqu->f==paqu->r)
return 0;
else
return (paqu->q[paqu->f]);
}
/*/求队列的长度*/
int QueueLength(PSeqQueue paqu)
{
return ((paqu->r-paqu->f+MAXNUM)%MAXNUM);
}