您的位置:首页 > 理论基础 > 数据结构算法

数据结构之队列 C++实现

2015-09-14 21:36 651 查看
队列很重要的一点就是入队在队尾进行,出队在队首进行,所以又把队列称为先进先出表。

功能实现

1.入队功能

使用链表实现

#include"iostream"

using namespace std;

typedef struct student{
int data;
student* next;
}Node;

typedef struct linkQueue{
Node *first, *rear;
linkQueue() :first(NULL), rear(NULL){}
}Queue;

/*
入队,入队是在队尾操作,出队是在队首操作
*/
Queue* insert(Queue *Q, int x){
Node *temp;
temp = (Node*)malloc(sizeof(Node));
temp->data = x;
temp->next = NULL;
if (Q->rear == NULL){
Q->first = temp;
Q->rear = temp;
}
else{
Q->rear->next = temp;
Q->rear = temp;
}
return Q;
}

int main(){
Queue *q = new Queue;
insert(q, 1);
insert(q, 2);
insert(q, 3);
cout << "队首:"<<q->first->data << endl;
cout << "队尾:" << q->rear->data << endl;

system("pause");
return 0;
}


现象如下图所示:



2.出队功能

出队在队首操作,分三种情况:

1.队首为空,直接返回空;

2.队首与队尾相同,出队后,队首和队尾为空;

3.其他,删除原队首,将队首指向原队首的下一个节点。

/*
出队
*/
Queue* dequeue(Queue* Q){
Node *temp;
if (Q->first == NULL){
cout << "NULL Queue" << endl;
return NULL;
}
else{
temp = Q->first;
if (Q->first == Q->rear){
Q->first = NULL;
Q->rear = NULL;
}
else{
Q->first = Q->first->next;
free(temp);
}
return Q;
}
}

int main(){
Queue *q = new Queue;
//入队
cout << "入队:" << endl;
enqueue(q, 1);
enqueue(q, 2);
enqueue(q, 3);
cout << "队首:"<<q->first->data << endl;
cout << "队尾:" << q->rear->data << endl;

//出队
cout << "出队" << endl;
dequeue(q);
cout << "队首:" << q->first->data << endl;
cout << "队尾:" << q->rear->data << endl;

system("pause");
return 0;
}


现象如下图所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  队列