队列是一种线性表,与栈相反,队列的特点是“先进先出”;
队列的基本结构:
队列只允许在队尾插入元素,在队头输出元素;
定义队列元素用含两个结构体指针的结构体,一个指向队列前一个元素,一个指向后一个元素;指针中包含一个数和指向下一位的指针;在赋值时常让队头元素保持为空方便操作; 队列包含一个队头元素和一个队尾元素以及若干队内元素组成;
初始化时将队头与队尾元素都定义为NULL;
进队:先释放一个大小为队列元素大小的内存空间,接着让这个内存空间中存储的整数型变量赋值为要进队的数,随后让队尾元素指向这个元素,最后使这个元素成为队尾元素方便可重复操作;
出队:健壮性判断:如果队头元素与队尾元素相同,则说明此队列中没有插入元素,返回否;提供要查的队列和盛放出队元素值的整型变量,让中间变量赋值为队列的第二个元素(因为队头元素为空),整型变量赋值为元素的值,然后让队头元素指向中间变量指向的下一个元素(实际上将出队元素剔除出队列)最后将中间变量的内存空间释放;
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LinkNode{
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front/*队头*/,*rear/*队尾*/;
}LinkQueue;
void InitQueue(LinkQueue &Q){//初始化
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
Q.front->next=NULL;
}
void EnQueue(LinkQueue &Q,ElemType x){//进队
LinkNode *pnew=(LinkNode*)malloc(sizeof(LinkNode));
pnew->data=x;
pnew->next=NULL;
Q.rear->next=pnew;
Q.rear=pnew;
}
bool DeQueue(LinkQueue &Q,ElemType &x){//出队
if(Q.rear==Q.front)return false;//队列为空
LinkNode*q=Q.front->next;
x=q->data;
Q.front->next=q->next;
if(Q.rear==q)Q.rear=Q.front;
free(q);
return true;
}
int main(){
}