队列(链式)
16lz
2021-01-22
队列的链式优点是不用考虑队满情况。代码如下:
#include <iostream>#include <stdio.h>#include <stdlib.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop *///定义链式队列结点 typedef struct LinkNode{ int data; struct LinkNode *next;}LinkNode;//定义队头尾指针结点(或者叫队列) typedef struct { LinkNode *rear,*front;}LinkQueue;//初始化队列(带头结点) void InitQueue(LinkQueue &Q){ Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));//队头和队尾指针都指向头结点 Q.front->next = NULL; }//初始化队列(不带头结点) void InitQueue(LinkQueue &Q){ Q.front=NULL;//队头和队尾指针都指向NULL Q.rear=NULL;}//判断队列是否为空(带头结点) bool isEmpty(LinkQueue Q){ if(Q.front==Q.rear){ return true; }else{ return false; }} //判断队列是否为空(不带头结点) bool isEmpty(LinkQueue Q){ if(Q.front==NULL){ return true; }else{ return false; }} //入队(带头结点) void EnQueue(LinkQueue &Q,int x){ LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode)); s->data = x; s->next = NULL; Q.rear->next = s;//s插入到rear之后 Q.rear = s;//修改表尾指针 }//入队(不带头结点) void EnQueue(LinkQueue &Q,int x){ LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode)); s->data = x; s->next = NULL; if(Q.front==NULL){//队头尾指针指向第一个元素 Q.front = s; Q.rear = s; }else{ Q.rear->next = s;//s插入到rear之后 Q.rear = s;//修改表尾指针 } }//出队(带头结点)bool DeQueue(LinkQueue &Q,int &e)){ if(Q.front==Q.rear){//队空报错 return false; } LinkNode *q = Q.front->next;//指针q指向被删结点 e = q->data; Q.front->next = q->next; if(Q.rear==q){//最后一个结点情况 Q.rear = Q.front; } free(q); return true;} //出队(不带头结点)bool DeQueue(LinkQueue &Q,int &e)){ if(Q.front==NULL){//队空报错 return false; } LinkNode *q = Q.front->next;//指针q指向被删结点 e = q->data; Q.front = q->next; if(Q.rear==q){//最后一个结点情况 Q.front=NULL;//队头和队尾指针都指向NULL Q.rear=NULL; } free(q); return true;} int main(int argc, char** argv) { return 0;}
更多相关文章
- 2021.1.17——指针和结构体的初步认识
- 用replaceWith()对DOM结点操作时应注意的问题
- PHP如何区分继承链中的$ this指针?
- 堆栈/帧指针作为外部变量
- 自己实现的C++智能指针的功能代码和测试用例
- Android中findViewById()h获取EditText 空指针问题
- java--this指针在哪里存着呢?
- 填充java fx表时出现空指针异常
- Fragment中出现java.lang.NullPointerException 空指针 上下文为