#include "linked_list.h"
/*
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode;
*/
typedef LNode QNode;
typedef struct
{
QNode *front;
QNode *rear;
}LinkQueue;
int InitQueue_link(LinkQueue *queue)
{
QNode *hnode=NULL;
hnode=(QNode *)malloc(sizeof(QNode));
if(NULL==hnode)
return -1;
hnode->next=NULL;
(*queue).front=hnode;
(*queue).rear=hnode;
return 0;
}
int QueueEmpty_link(LinkQueue queue)
{
if(queue.front==queue.rear)
return 1;
return 0;
}
int QueueLength_link(LinkQueue queue)
{
int count=0;
QNode *p=queue.front;
while(p!=queue.rear)
{
p=p->next;
count++;
}
return count;
}
int Gethead_link(LinkQueue queue,ElemType *e)
{
if(QueueEmpty_link(queue))
return -1;
*e=(queue.front)->next->data;
return 0;
}
int EnQueue_link(LinkQueue queue,ElemType e)
{
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
if(NULL==p)
return -1;
p->data=e;
p->next=NULL;
(queue.rear)->next=p;
queue.rear=p;
return 0;
}
int DeQueue_link(LinkQueue queue,ElemType *e)
{
QNode *p=NULL;
if(QueueEmpty_link(queue))
return -1;
p=(queue.front)->next;
*e=p->data;
(queue.front)->next=p->next;
free(p);
return 0;
}
int main()
{
ElemType e;
LinkQueue q;
printf("(1)初始化链队q\n");
InitQueue_link(&q);
printf("(2)依次进链队元素a,b,c\n");
EnQueue_link(q,'a');
EnQueue_link(q,'b');
EnQueue_link(q,'c');
printf("(3)链队为%s\n",(QueueEmpty_link(q)?"空":"非空"));
if (DeQueue_link(q,&e)==-1)
printf("队空,不能出队\n");
else
printf("(4)出队一个元素%c\n",e);
printf("(5)链队q的元素个数:%d\n",QueueLength_link(q));
printf("(6)依次进链队元素d,e,f\n");
EnQueue_link(q,'d');
EnQueue_link(q,'e');
EnQueue_link(q,'f');
printf("(7)链队q的元素个数:%d\n",QueueLength_link(q));
printf("(8)出链队序列:");
while (!QueueEmpty_link(q))
{
DeQueue_link(q,&e);
printf("%c ",e);
}
printf("\n");
printf("(9)释放链队\n");
return 0;
}
这是没有实现的,正在改
*****************************************************************
经过几天奋斗,终于成功改出来,现贴如下
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode;
typedef LNode QNode;
typedef struct
{
QNode *front;
QNode *rear;
}LinkQueue;
int CreatQueue(LinkQueue *queue)
{
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
if(NULL==p)
return -1;
p->next=NULL;
queue->front=p;
queue->rear=p;
return 0;
}
int QueueEmpty(LinkQueue *queue)
{
if(queue->front->next==NULL)
return 1;
return 0;
}
int QueueLength(LinkQueue queue)
{
int count=1;
QNode *p=queue.front;
if(QueueEmpty(&queue))
return 0;
while(p->next->data!=queue.rear->data)
{
p=p->next;
count++;
}
return count;
}
int GetHead(LinkQueue queue,ElemType *e)
{
if(QueueEmpty(&queue))
return -1;
*e=(queue.front)->next->data;
return 0;
}
int EnQueue(LinkQueue *queue,ElemType e)
{
QNode *p;
p=(QNode *)malloc(sizeof(QNode));
if(NULL==p)
return -1;
p->data=e;
p->next=NULL;
queue->rear->next=p;
queue->rear=p;
return 0;
}
int DeQueue(LinkQueue queue,ElemType *e)
{
QNode *p=NULL;
if(QueueEmpty(&queue))
return -1;
p=(queue.front)->next;
*e=p->data;
(queue.front)->next=p->next;
p->next=NULL;
free(p);
return 0;
}
int main()
{
int i;
ElemType e='a';
LinkQueue d ;
CreatQueue(&d);
EnQueue(&d,'g');
if(QueueEmpty(&d))
printf("此队列为空队列\n");
printf("%c\n",d.front->next->data);
printf("%c\n",d.rear->data);
printf("%d\n",QueueLength(d));
EnQueue(&d,'b');
printf("%c\n",d.front->next->data);
printf("%c\n",d.rear->data);
printf("%d\n",QueueLength(d));
EnQueue(&d,'c');
printf("%c\n",d.front->next->data);
printf("%c\n",d.rear->data);
printf("%d\n",QueueLength(d));
EnQueue(&d,'d');
if(QueueEmpty(&d))
printf("此队列为空队列\n");
if(0==GetHead(d,&e))
printf("队首的数据是:%c \n",e);
for(i=0;i<4;i++)
{
if(0==GetHead(d,&e))
printf("队首的数据是:%c \n",e);
printf("%c\n",d.front->next->data);
printf("%c\n",d.rear->data);
printf("出队列的第%d 个数:",i+1);
DeQueue(d,&e);
printf("%c\n",e);
}
if(QueueEmpty(&d))
printf("此队列为空队列\n");
DeQueue(d,&e);
printf("%c\n",e);
printf("%d\n",QueueLength(d));
if(0==GetHead(d,&e))
printf("队首的数据是:%c \n",e);
return 0;
}
测试结果