链表队列的实现

队列也是数据结构中比较重要的一种,和栈相反的是,队列是先进先出的,先进队列的可以先出队,跟平时我们排队是一样的。在允许多通道程序运行的计算机系统中,同时几个作业运行。凡是申请输出的作业都从队尾进入队列。

现在用链表实现队列,先定义一个链表结点:

typedef struct QNode
{
	int data;
	QNode *next;
}QNode,*QueuePtr;

给队列定义一个头结点结构体,结构体中包含着两个链表结点指针,第一个指针指向对象的头结点,第二个指针指向对象的尾结点:

typedef struct
{
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;

下面编写初始化队列:

bool InitQueue(LinkQueue &Q)
{
	Q.front=Q.rear=NULL;
	return true;
}

下面是压入数据的代码,数据被从队尾压入:

bool EnQueue(LinkQueue &Q,int e)
{
	if(Q.front==NULL)
	{
		Q.front=new QNode;
		Q.front->data=e;
		Q.front->next=NULL;
		Q.rear=Q.front;
		return true;
	}
	QueuePtr temp=new QNode;
	temp->data=e;
	temp->next=NULL;
	Q.rear->next=temp;
	Q.rear=temp;
	return true;
}

然后给出从对头出队的代码,数据从对头取出:

bool DeQueue(LinkQueue &Q,int &e)
{
	if(Q.front==NULL) return false;
	if(Q.front==Q.rear)
	{
		e=Q.front->data;
		delete Q.front;
		Q.front=NULL;
		Q.rear=NULL;
		return true;
	}
	QueuePtr p=Q.front;
	e=p->data;
	Q.front=p->next;
	delete p;
	return true;
}

下面编写测试代码:

void main()
{
	LinkQueue L;
	InitQueue(L);
	cout<<"please input 5 integers: ";
	int x=0;
	for(int i=0;i<5;i++)
	{
		cin>>x;
		EnQueue(L,x);
	}
	cout<<"out of queue: ";
	while(L.front!=NULL)
	{
		DeQueue(L,x);cout<<x<<" ";
	}
}

测试结果为:

时间: 2024-10-03 13:45:15

链表队列的实现的相关文章

链表队列

接下来把链表队列的代码分享给大家.因为还是链表操作,不做其他介绍. lqueue.h #ifndef _QUEUE_H #define _QUEUE_H #define MAXSIZE 10 typedef struct node { int data; struct node * next; } Node; typedef struct queue { Node * front; Node * rear; int size; } Queue; void q_init(Queue * queue

【C/C++学院】0802-链式栈/链表队列以及优先队列/封装链表库

链式栈 // stacklinknode.h #define datatype int struct stacknode { int num;//编号 datatype data;//数据 struct stacknode *pNext;//指针域 }; typedef struct stacknode StackNode;//简化 StackNode * init(StackNode * phead);//初始化 StackNode * push(StackNode * phead, int

数组队列 与 链表队列

做了些实验,感觉 用链表实现队列 比 用数组实现队列 性能好 进出队的每秒操作数比较 数组队列 enqueue 37,037 dequeue 4,166,666 链表队列 enqueue 277,778 dequeue 666,667 先入队n次,再出队n次的运行时间比较,单位是秒 出入队次数 | 数组队列运行时间 | 链表队列运行时间 1,000 0.01 0.01 10,000 0.04 0.04 100,000 2.7 0.4 1,000,000 4 最后一组,数组队列的半天没运行出来 下

C语言实现链表队列(基本操作及图示)

-------------------------------------------- 基本概念: 和栈相反,队列是一种先进先出(FIFO)的线性表.只允许在一端插入,在另一端删除. 允许插入的叫"队尾"(rear),允许删除的叫"队头"(front). 使用场景:操作系统的作业排队.在允许多道程序运行的计算机系统中,同时有几个作业运行.如果运行结果都需要通道输出,则按照请求输出的先后次序排队.每当通道传输完毕可以接受新的输出任务时,队头的作业先从队列中退出作输出

5、链表队列(java实现)

1.图例 2.链表节点 public class Node<T> { public T data; public Node next; } 3.具体实现 public class LinkQueue<T> { private static Node head; private static Node tail; private static int size; /** * 初始化 */ public void initQueue() { Node node = new Node()

Java算法入门-数组&amp;链表&amp;队列

算法就是解决问题的步骤,在一般的项目中可能用不上,但是一旦涉及到高并发,高性能时,就不得不考虑算法的优劣. 设计原则和特性 设计原则:正确性,可读性,健壮性,高效率和低存储 特性:有穷性,确定性,可行性,有输入,有输出. 算法题入门体验 如何判断是一个数是2的整数次幂?常规方法使用循环,但是在学习了二进制的基础知识后,发现可以使用模运算来实现. 1 import java.util.Scanner; 2 3 public class base { 4 5 public static void m

数据结构 链表队列

1 #include"stdio.h" 2 #include"stdlib.h" 3 typedef int DataType; 4 typedef struct Seq 5 { 6 DataType data;//数据存储 7 struct Seq *next;//指向下一个节点的指针 8 }SeqList; 9 typedef struct 10 { 11 SeqList *front,*rear;//定义头尾指针 12 }Link; 13 void initQ

不定长链表队列C语言实现

#ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { False = 0, True,}Bool; typedef int ElemType; #define QUEUE_MAX_SIZE 10 #define STACK_INIT_SIZE 10#define STACK_INCREMENT_SIZE 2 #define Null ((void *)0) ty

图的遍历(邻居(链表+队列)实例

1.#include <stdio.h>#include <stdlib.h>#include "LGraph.h" /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void print_data(LVertex* v){    printf("%s", (char*)v