基于链表的队列基本操作的实现

程序代码:

#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*************

ret except :1   actual:1
value expect : d  actual : d


**********Pop 4*************


ret except :0   actual:0


**********Pop NULL*************


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值