社区
C语言
帖子详情
用链表做一个FIFO队列,如何实现????
tomsx
2003-11-11 08:53:54
如提
...全文
355
4
打赏
收藏
用链表做一个FIFO队列,如何实现????
如提
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yuantao
2003-11-12
打赏
举报
回复
不要这么麻烦把,你可以用stl里面的list来实现queue
只要对list做一些限制即可
ZhangYv
2003-11-11
打赏
举报
回复
以下是一个图的广度优先周游算法C语言实现,数据结构图章节一般都会有算法介绍,数据结构使用到队列和邻接表.
#include <stdio.h>
#include <malloc.h>
enum boolean {false, true};
const int MaxSize = 20;
struct celltype{
int id;
celltype *next;
};
struct queue{
celltype *front, *rear;
};
struct EdgeNode{
int adjvex;
EdgeNode *next;
};
struct vexNode{
int info;
EdgeNode *next;
};
vexNode Graph[MaxSize];
int N;
void MakeNull(queue *head)
{
head->front->next = NULL;
head->rear = head->front;
}
void CreateQueue(queue *head)
{
head->front = (celltype*) malloc (sizeof(celltype));
head->rear = (celltype*) malloc (sizeof(celltype));
MakeNull(head);
}
boolean IsEmpty(queue *head)
{
if (head->front == head->rear)
return true;
else
return false;
}
void Dequeue(queue *head)
{
celltype *t;
if (!IsEmpty(head)){
t = head->front;
head->front = head->front->next;
free(t);
} else
printf("%s", "DeleteError!");
}
void Enqueue(queue *head, int id)
{
head->rear->next = (celltype*) malloc (sizeof(celltype));
head->rear = head->rear->next;
head->rear->id = id;
}
void CreateGraph()
{
int i,k;
EdgeNode *p;
printf("%s", "Please Input MaxNode = ");
scanf("%d", &N);
for (i = 0; i < N; i++){
Graph[i].info = i;
printf("%s %d\n", "Input Node", i,"'s adjvexNode = ,input -1 for end");
scanf("%d", &k);
if (k >= 0){
Graph[i].next = (EdgeNode*) malloc (sizeof(EdgeNode));
p = Graph[i].next;
p->adjvex = k;
p->next = NULL;
}
while (k >= 0){
scanf("%d", &k);
if (k >= 0){
p->next = (EdgeNode*) malloc (sizeof(EdgeNode));
p = p->next;
p->adjvex = k;
}
}
p->next = NULL;
}
}
void Print()
{
int i;
EdgeNode *p;
for (i = 0; i < N; i++){
printf("%s %d %s ", "Node ", i, "'s adjvex = ");
for (p = Graph[i].next; p; p = p->next)
printf("%d ", p->adjvex);
printf("\n");
}
}
void BFS()
{
void Search(int, boolean *);
boolean visited[MaxSize];
int i;
for (i = 0; i < N; i++)
visited[i] = false;
for (i = 0; i < N; i++)
if (!visited[i])
Search(0, visited);
}
void Search(int i, boolean *visited)
{
queue *Q;
celltype *p;
EdgeNode *adj;
CreateQueue(Q);
Enqueue(Q, i);
visited[i] = true;
printf("%d ", i);
while (!IsEmpty(Q)){
p = Q->front->next;
adj = Graph[p->id].next;
while (adj){
if (!visited[adj->adjvex]){
Enqueue(Q, adj->adjvex);
printf("%d ", adj->adjvex);
visited[adj->adjvex] = true;
}
adj = adj->next;
}
Dequeue(Q);
}
}
void main()
{
CreateGraph();
BFS();
}
viscky
2003-11-11
打赏
举报
回复
typedef struct Slnode{
datatype data;
struct Slnode *link;
}*Qlink;
struct Qnode{
Qlink front;
Qlink rear;
};
Qnode Q;
void Init_Qnode(Qnode Q){
new(Q.front);
Q.front->link=NULL;
Q.rear=Q.front;
}
tibetan
2003-11-11
打赏
举报
回复
看你都两个角了。呵呵,还这样问问题。你可以写出来,看看什么地方有错误。
一个循环线性地址先进先出
队列
(
FIFO
),
一个循环线性地址先进先出
队列
(
FIFO
),非常适合用
做
通讯、任务等,具有如下特点: 1.循环
队列
,空间利用率非常高,不用动态分配内存,不使用
链表
,无内存泄漏,无内存碎片; 2.线性地址空间,直接使用memcpy进出,...
先进先出
队列
FIFO
一个循环线性地址先进先出
队列
(
FIFO
),非常适合用
做
通讯、任务等,具有如下特点: 1.循环
队列
,空间利用率非常高,不用动态分配内存,不使用
链表
,无内存泄漏,无内存碎片; 2.线性地址空间,直接使用memcpy进出,...
人工智能-项目实践-python-顺序表、
链表
、栈、
队列
、树、Hashmap等数据结构;排序、二分法查找、树遍历等常见算法
实现
顺序表、
链表
、栈、
队列
、树、Hashmap等数据结构;排序、二分法查找、树遍历等常见算法
实现
python语言
实现
常见数据结构 ...
FIFO
队列
LIFO
队列
优先
队列
(Priority Queue) 双端
队列
(double-ended queue)
基于Linux消息
队列
的简易聊天室(C语言)(附源代码)
消息
队列
是System V支持一种IPC机制,通过类似
链表
的操作向一个
FIFO
里通过msgsnd发送用户自定义数据,进程可以通过msgrcv来接收指定类似mtype的数据,从而
实现
进程间通信。 在服务器端
实现
广播功能,以及服务器退出...
第二章 栈、
队列
、
链表
.zip
队列
是一种特殊的线性结构,它只允许在
队列
的首部(head)进行删除操作,这称为“出队”,而在
队列
的尾部(tail)进行插入操作,这称为“入队”。当
队列
中没有元素时(即 head==tail),称为空
队列
。我们称为“先进...
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章