#define LDT char
//结点类型
typedef struct llnode{
LDT data;
struct llnode *next;
}LINKNODE;
//链队列结构
typedef struct{
LINKNODE *front,*rear;
}LINKQUEUE;
链队列上的操作
(1)创建链队列
在QueueLinkControl.h写出方法声明
#include <stdio.h>
#include "QueueLinkCs.c"
/*
创建链队
*/
LINKQUEUE * initLinkQueue(LINKQUEUE *LQ);
在QueueLinkControl.c中实现此方法
#include "QueueLinkControl.h"
#include <stdlib.h>
/*
创建链队
*/
LINKQUEUE *initLinkQueue(LINKQUEUE *LQ){
//设置队头指针
LQ->front=(LINKNODE *)malloc(sizeof(LINKNODE));
LQ->front->data='#';//设置队头指针,也是头结点的指针域
LQ->front->next=NULL;
//初始条件:队头指针和队尾指针一致
LQ->rear=LQ->front;
return LQ;
}
(2)插入
在QueueLinkControl.h写出方法声明
/*
链队插入:队尾
*/
LINKQUEUE * inLinkQueue(LINKQUEUE *LQ,LDT x);
在QueueLinkControl.c中实现此方法
(3)删除
在QueueLinkControl.h写出方法声明
/*
链队删除:队头
*/
LINKQUEUE *outLinkQueue(LINKQUEUE *LQ);
/*
打印链表结点
*/
void printLinkQueue(LINKQUEUE *LQ);
在QueueLinkControl.c中实现此方法
#include "QueueLinkControl.h"
#include <stdlib.h>
LINKQUEUE *outLinkQueue(LINKQUEUE *LQ){
if(LQ==NULL || LQ->rear==LQ->front){
printf("LQ is empty!n");
return LQ;
}
//1.获取首结点
LINKNODE *frontNextNode;
frontNextNode=LQ->front->next;
//2.将首节点的next指针域的值存储头结点的next域
LQ->front->next=frontNextNode->next;
//3.如果队尾结点等于首节点的next指针域的值,那么表示是空栈,根据空链队列的结构,还需修改队尾指针,使指向头结点.
if(LQ->rear==frontNextNode){
LQ->rear=LQ->front;
}
//4.释放删除的结点
free(frontNextNode);
printf("out link queue success!n");
return LQ;
}
/*
打印链表结点
*/
void printLinkQueue(LINKQUEUE *Q){
//实例化一个LQ,为了不改变原来链队Q
LINKQUEUE *LQ;
LQ=(LINKQUEUE *)malloc(sizeof(LINKQUEUE));
LQ->front=Q->front;
LQ->rear=Q->rear;
printf("queue={");
//1.判断不是空链表
if(LQ!=NULL && LQ->rear!=LQ->front){
int flag=0;
do{
//2.输出数据
if(flag==0){
printf("%c",LQ->front->data);
flag=1;
}else{
printf(",%c",LQ->front->data);
}
//3.链头指针向后移动
LQ->front=LQ->front->next;
}while (LQ->front!=LQ->rear) ;
printf(",%c",LQ->front->data);
}
printf("}n");
}










