/*如果采用带尾指针的单循环链表(带头结点)作为队列的存储结构,设计算法以实现队列的各运算。
*/
#include <iostream>
using namespace std;
#include<stdlib.h>
#include< stdio.h>
#define max 100
typedef int element;
typedef struct LNode {
element data;
struct LNode* next;
}node;
typedef struct {
node* rear;//队尾指针
}linkQueue;
void iniQueue(linkQueue* Q) {
Q->rear = new node;
Q->rear->next = Q->rear;
}
//判断队空
bool queueEmpty(linkQueue* Q) {
return (Q->rear = Q->rear->next);
}
//取队头元素
void queueFront(linkQueue* Q, element x) {
if (queueEmpty(Q))
cout << "队列为空,不可取队头元素" << endl;
else
node*p=Q->rear->next;
x = Q->rear->next->next->data;
}
//入队
bool enQueue(linkQueue* Q, element x) {
node* p = new node;
if (p == NULL)
return false;
else {
p->data = x;
p->next = Q->rear->next;
Q->rear->next = p;
Q->rear = p;
return true;
}
}
//出队
void outQueue(linkQueue* Q, element x) {
node* u,*p;
if (queueEmpty(Q))
cout << "队列为空,不可出队" << endl;
else {
p = Q->rear->next;
x = p->next->data;
u = p->next;
p->next = u->next;
delete u;
if (p->next == NULL)
Q->rear = Q->rear->next;
}
}
int main() {
linkQueue* Q = new linkQueue;
char a[100]="a", b[100] = "a";
int m ;
cout << "输入入队元素个数 " << endl;
cin >> m ;
cout << "输入入队元素:";
gets_s( a);
for (int i = 0; i < m; i++) {
enQueue(Q, a[i]);
}
for (int i = 0; i <m; i++) {
outQueue(Q, b[i]);
cout << b[i] << " ";
}
}
运行结果是这样,想问一下该怎么解决Q->rear越界问题