一、基础知识
1.队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。
2.队列是一种先进先出的线性表。
3.与栈相同,队列也是一种重要的线性结构,实现一个队列同样需要顺序表或链表作为基础。
4.栈我们一般用顺序表来实现,而队列我们常用链表来实现,简称为链队列。
二、队列的链式存储结构
将队头指针front指向链队列的头结点,队尾指针rear指向终端结点。
空队列时,队头指针front和队尾指针rear都指向头结点。
typedef char ElemType;typedef struct Qnode //结点结构{ElemType data;struct Qnode *next;}Qnode;typedef struct Qnode * QueuePtr; //指向结点结构的指针typedef struct //队列的链表结构{QueuePtr front; //队头指针QueuePtr rear; //队尾指针}LinkQueue;
三、创建一个队列
Step.1 在内存中生成一个头结点。
Step.2 将队列的头指针和尾指针指向这个生成的头结点。
//创建一个队列void InitQueue(LinkQueue *q){q->front = q->rear = (QueuePtr)malloc(sizeof(Qnode));if (!q->front){exit(0);}q->front->next = NULL;}
四、入队列操作(尾部插入)
- //入队列操作
void InsertQueue(LinkQueue *q, ElemType e){QueuePtr p;p = (QueuePtr)malloc(sizeof(Qnode));if (!p){exit(0);}p->data = e;p->next = NULL;q->rear->next = p;q->rear = p;}
五、出队列操作(头部删除)
//出队列操作void DeleteQueue(LinkQueue *q, ElemType *e){QueuePtr p;if (q->front = q->rear) //空队列{return;}p = q->front->next;*e = p->data;q->front->next = p->next;if (q->rear = p) //原队列只有一个元素的情况,删除该节点,队列为空队列{q->rear = q->front;}free(p);}
六、销毁一个队列
由于链队列建立在内存的动态区,因此当一个队列不再有用时,应该及时将他销毁,以免过多的占用内存空间。
//销毁一个队列void DestoryQueue(LinkQueue *q){while (q->front){q->rear = q->front->next; //从头向后删free(q->front);q->front = q->rear;}}
七、求队列的长度
//求队列长度int LenQueue(LinkQueue *q){QueuePtr t = q->front->next;int len = 0;while (t){t = t->next;len++;}return len;}
八、判断队列是否为空
//判断队列是否为空bool EmptyQueue(LinkQueue *q){if (q->front == q->rear)return true;elsereturn false;}
九、输出队列元素
//输出队列元素void DisQueue(LinkQueue *q){QueuePtr p = q->front->next;printf("此时的链队列输出:\n");while (p){printf("%c", p->data);p = p->next;}printf("\n");}
十、获取队首、队尾元素
//获取队首元素ElemType QueueFront(LinkQueue *q){return q->front->data;}//获取队尾元素ElemType QueueRear(LinkQueue *q){return q->rear->data;}
十一、创建一个长度由自己决定的队列并初始化队列
//创建一个长度由自己确定的队列并初始化void CreateQueue(LinkQueue *q){ElemType d;int len, i;QueuePtr p;printf("请输入队列的长度:");scanf("%d", &len);for (i = 0; i < len; i++){p = (QueuePtr)malloc(sizeof(Qnode));if (!p){exit(0);}scanf("%c", &d);p->data = d;p->next = NULL;q->rear->next = p;q->rear = p;}}
本文介绍了队列的基本概念及其链式存储结构,并详细阐述了如何使用链表实现队列的各种基本操作,包括创建、入队、出队、销毁、求长度等。
2344

被折叠的 条评论
为什么被折叠?



