二、代码部分 一、头文件 二、队列结点 三、链队列 四、队列的初始化 五、队列的打印 六、元素的插入 七、元素的删除 八、测试函数 九、主函数 十、所有代码 十一、测试结果 十二、总结
一、头文件
#include#include
二、队列结点
//队列结点
typedef struct QueueNode
{
int data;
struct QueueNode *next;
}*QueueNodePtr;
三、链队列
typedef struct LinkQueue
{
QueueNodePtr front;
QueueNodePtr tail;
}*LinkQueuePtr;
四、队列的初始化
//队列的初始化
LinkQueuePtr initQueue()
{
LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(struct LinkQueue));
QueueNodePtr headNode = (QueueNodePtr)malloc(sizeof(struct QueueNode));
headNode->next = NULL;
resultPtr->front = headNode;
resultPtr->tail = headNode;
return resultPtr;
}
五、队列的打印
//队列的打印
void printQueue(LinkQueuePtr Queue)
{
QueueNodePtr p = Queue->front->next;
while(p!=NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("rn");
}
六、队列元素插入
//队列元素插入
void insertQueue(LinkQueuePtr Queue,int element)
{
QueueNodePtr p = (QueueNodePtr)malloc(sizeof(struct QueueNode));
p->data = element;
p->next = NULL;
Queue->tail->next = p;
Queue->tail = p;
}
七、队列元素的删除
//队列元素删除
int deleteQueue(LinkQueuePtr Queue)
{
int value;
//判断队列是否为空
if(Queue ->front == Queue->tail)
{
printf("The queue is full.n");
return ;
}
QueueNodePtr p = Queue->front ;
QueueNodePtr q = p->next;
p->next = p->next->next;
value = q->data;
if (Queue->tail == q)
{
Queue->tail = Queue->front;
}
free(q);
return value;
}
八、测试函数
void testLinkQueue(){
LinkQueuePtr tempQueuePtr;
tempQueuePtr = initQueue();
insertQueue(tempQueuePtr, 10);
insertQueue(tempQueuePtr, 30);
insertQueue(tempQueuePtr, 50);
printQueue(tempQueuePtr);
printf("dequeue gets %drn", deleteQueue(tempQueuePtr));
printf("dequeue gets %drn", deleteQueue(tempQueuePtr));
printf("dequeue gets %drn", deleteQueue(tempQueuePtr));
printf("dequeue gets %drn", deleteQueue(tempQueuePtr));
insertQueue(tempQueuePtr, 8);
printQueue(tempQueuePtr);
}
九、主函数
int main()
{
testLinkQueue();
return 1;
}
十、所有代码
#include#include //队列结点 typedef struct QueueNode { int data; struct QueueNode *next; }*QueueNodePtr; typedef struct LinkQueue { QueueNodePtr front; QueueNodePtr tail; }*LinkQueuePtr; //队列的初始化 LinkQueuePtr initQueue() { LinkQueuePtr resultPtr = (LinkQueuePtr)malloc(sizeof(struct LinkQueue)); QueueNodePtr headNode = (QueueNodePtr)malloc(sizeof(struct QueueNode)); headNode->next = NULL; resultPtr->front = headNode; resultPtr->tail = headNode; return resultPtr; } //队列的打印 void printQueue(LinkQueuePtr Queue) { QueueNodePtr p = Queue->front->next; while(p!=NULL) { printf("%d ", p->data); p = p->next; } printf("rn"); } //队列元素插入 void insertQueue(LinkQueuePtr Queue,int element) { QueueNodePtr p = (QueueNodePtr)malloc(sizeof(struct QueueNode)); p->data = element; p->next = NULL; Queue->tail->next = p; Queue->tail = p; } //队列元素删除 int deleteQueue(LinkQueuePtr Queue) { int value; //判断队列是否为空 if(Queue ->front == Queue->tail) { printf("The queue is full.n"); return ; } QueueNodePtr p = Queue->front ; QueueNodePtr q = p->next; p->next = p->next->next; value = q->data; if (Queue->tail == q) { Queue->tail = Queue->front; } free(q); return value; } void testLinkQueue(){ LinkQueuePtr tempQueuePtr; tempQueuePtr = initQueue(); insertQueue(tempQueuePtr, 10); insertQueue(tempQueuePtr, 30); insertQueue(tempQueuePtr, 50); printQueue(tempQueuePtr); printf("dequeue gets %drn", deleteQueue(tempQueuePtr)); printf("dequeue gets %drn", deleteQueue(tempQueuePtr)); printf("dequeue gets %drn", deleteQueue(tempQueuePtr)); printf("dequeue gets %drn", deleteQueue(tempQueuePtr)); insertQueue(tempQueuePtr, 8); printQueue(tempQueuePtr); } int main() { testLinkQueue(); return 1; }
十一、测试结果
十二、总结
1、在定义链队结点结构体的时候LinkNode* next前面应该加struct
2、初始化的时候LinkNodePtr headerPtr = (LinkNodePtr)malloc(sizeof(struct LinkNodePtr));应该改为LinkNodePtr headerPtr = (LinkNodePtr)malloc(sizeof(struct LinkQueue));
3、经过测试,发现初始化时resultPtr和headNode在相邻空间
4、局部变量的空间能重复利用
5、指针的值是其他元素的位置,指针的地址是该指针的地址



