程序代码:
#include<stdio.h>
#include<stdlib.h>
//#define SeqMax 1000
#define SeqType char
typedef struct Node{
SeqType data;
struct Node* next;
}SeqNode;
typedef struct link{
SeqNode* head;
SeqNode* tail;
}Link;
SeqNode* CreateNewNode(SeqType value){
SeqNode* new = (SeqNode*)malloc(sizeof(SeqNode));
new->data = value;
new->next = NULL;
return new;
}
//销毁,防止内存泄漏
void Destroy(SeqNode* tmp){
free(tmp);
}
//队列到初始化
void LinkQueueInit(Link* que){
que->head = (SeqNode*)malloc(sizeof(SeqNode));
que->tail = que->head;
if(que == NULL){
//非法输入
return;
}
if(que->head->next == NULL){
//空队列
return;
}
SeqNode* cur = que->head;
while(cur->next !=NULL){
SeqNode* tmp = cur->next;
cur->next = tmp->next;
Destroy(tmp);
}
return;
}
//队列到入队void LinkQueuePush(Link* que,SeqType value){
if(que == NULL){
//非法输入
return;
}
SeqNode* new = CreateNewNode(value);
que->tail->next = new;
que->tail = new;
}
//队列的出队
int LinkQueuePop(Link* que,SeqType * value){
if(que == NULL){
//非法输入
return 0;
}
if(que->head->next == NULL){
//空队列
return 0;
}
*value = que->head->next->data;
SeqNode* tmp = que->head->next;
que->head = tmp;
Destroy(tmp);
return 1;
}
//取队首元素
int GetLinkQueueTop(Link* que,SeqType *value){
if(que == NULL){//非法输入
return 0;
}
if(que->head->next ==NULL){
//空队列
return 0;
}
*value = que->head->next->data;
return 1;
}
//输出队列中到元素
void printQueue(Link* que,char* str){
printf("\n**********%s*************\n",str);
SeqNode*cur = que->head->next;
while(cur!=NULL){
printf("%c ",cur->data);
cur = cur->next;
}
printf("\n");
}
检测代码:
//检测函数
void test(){
Link que;//带头结点
int ret;
SeqType value;
LinkQueueInit(&que);
LinkQueuePush(&que,'a');
LinkQueuePush(&que,'b');
LinkQueuePush(&que,'c');
LinkQueuePush(&que,'d');
printQueue(&que,"Push 4");
ret = GetLinkQueueTop(&que, &value);
printf("ret except :1 actual:%d\n",ret);
printf("value expect : a actual : %c\n",value);
LinkQueuePop(&que,&value);
printQueue(&que,"Pop 1");
ret = GetLinkQueueTop(&que, &value);
printf("ret except :1 actual:%d\n",ret);
printf("value expect : b actual : %c\n",value);
LinkQueuePop(&que,&value);
printQueue(&que,"Pop 2");
ret = GetLinkQueueTop(&que, &value);
printf("ret except :1 actual:%d\n",ret);
printf("value expect : c actual : %c\n",value);
LinkQueuePop(&que,&value);
printQueue(&que,"Pop 3");
ret = GetLinkQueueTop(&que, &value);
printf("ret except :1 actual:%d\n",ret);
printf("value expect : d actual : %c\n",value);
LinkQueuePop(&que,&value);
printQueue(&que,"Pop 4");
ret = GetLinkQueueTop(&que, &value);
printf("ret except :0 actual:%d\n",ret);
LinkQueuePop(&que,&value);
printQueue(&que,"Pop NULL");
}
//主函数
int main(){
test();
}
检测结果:
[chaiyandong@localhost shujujiegou]$ ./linkqueue
**********Push 4*************
a b c d
ret except :1 actual:1
value expect : a actual : a
**********Pop 1*************
b c d
ret except :1 actual:1
value expect : b actual : b
**********Pop 2*************
c d
ret except :1 actual:1
value expect : c actual : c
**********Pop 3*************
d
ret except :1 actual:1
value expect : d actual : d
**********Pop 4*************
ret except :0 actual:0
**********Pop NULL*************