数据结构day6链式队列

主程序

#include "fun.h"

int main(int argc, const char *argv\[\])

{

que_p Q=create();

enqueue(Q,10);

enqueue(Q,20);

enqueue(Q,30);

enqueue(Q,40);

enqueue(Q,50);

show_que(Q);

dequeue(Q);

show_que(Q);

printf("len:%d\n",que_len(Q));

free_que(Q);

Q=NULL;

show_que(Q);

return 0;

}

源程序

#include "fun.h"

que_p create()

{

que_p Q=(que_p)malloc(sizeof(que));

if(Q==NULL)

{

printf("error\n");

return NULL;

}

node_p H=(node_p)malloc(sizeof(node));

if(H==NULL)

{

printf("error\n");

free(Q);

Q=NULL;

return NULL;

}

H->next=NULL;

H->len=0;

Q->head=H;

Q->tail=H;

return Q;

}

int empty_que(que_p Q)

{

if(Q==NULL)

{

printf("error\n");

return -1;

}

return Q->head==Q->tail;

}

node_p create_new(typdata data)

{

node_p new =(node_p)malloc(sizeof(node));

if(new==NULL)

{

printf("error");

}

new->data=data;

new->next=NULL;

return new;

}

void enqueue(que_p Q,typdata data)

{

if(Q==NULL)

{

printf("erro\n");

}

node_p new=create_new(data);

Q->tail->next=new;

Q->tail=new;

Q->head->len++;

}

void show_que(que_p Q)

{

if(Q==NULL)

{

printf("error\n");

return;

}

if(empty_que(Q))

{

printf("Queue empty\n");

return;

}

node_p H=Q->head;

while(H->next!=NULL)

{

H=H->next;

printf("%-4d",H->data);

}

putchar(10);

}

void dequeue(que_p Q)

{

if(Q==NULL)

{

printf("error\n");

return;

}

if(empty_que(Q))

{

printf("Queue empty\n");

return;

}

printf("dequeue:%d\n",Q->head->next->data);

node_p p=Q->head->next;

Q->head->next=Q->head->next->next;

free(p);

p=NULL;

Q->head->len--;

}

int que_len(que_p Q)

{

if(Q==NULL)

{

printf("error\n");

return-1;

}

return Q->head->len;

}

void free_que(que_p Q)

{

if(Q==NULL)

{

printf("error\n");

return;

}

while(Q->head->next!=NULL)

{

dequeue(Q);

}

free(Q->head);

Q->head=NULL;

free(Q);

Q=NULL;

}

头文件

#ifndef _FUN_H

#define _FUN_H

#include <myhead.h>

typedef int typdata;

typedef struct node

{

union

{

int len;

typdata data;

};

struct node *next;

}node,*node_p;

typedef struct queue

{

node_p head;

node_p tail;

}que,*que_p;

que_p create();

int empty_que(que_p Q);

node_p create_new(typdata data);

void enqueue(que_p Q,typdata data);

void show_que(que_p Q);

void dequeue(que_p Q);

int que_len(que_p Q);

void free_que(que_p Q);

#endif

相关推荐
by2099917 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Code_Solitude17 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
Pniubi19 小时前
快速排序(力扣基础)(递归)
java·数据结构·算法
inrichtt1 天前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger1 天前
数据结构——选择排序
数据结构·算法·排序算法
丑梨数据1 天前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓1 天前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
CS创新实验室2 天前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic1012 天前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
从小白到软工2 天前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程