使用单链表实现队列
使用单链表实现队列其实和尾插法实现单链表的思路没什么两样,队列和栈其实就是运算受到限制的单链表,尾插法运用在队列中,头插法运用在栈中,现在我才比较深刻的理解了头插法和尾插法的原理和应用并熟练运用。
基本思路:其实就是尾插法的变形,声明一个包含两个结点指针的结点,一个指向链表头一个指向链表尾,每次插入元素在表尾,删除元素在表头
整体代码
#include<iostream>
typedef struct Queue{
int data;
struct Queue* next;
}Queue;
typedef struct LinkQueue{
Queue* front;
Queue* rear;
}LinkQueue;
using namespace std;
int Isempty(LinkQueue*); //判队列空
void Input(LinkQueue*); //输入数据
int Enqueue(LinkQueue*,int); //插入数据
int Dequeue(LinkQueue*); //删除数据
void Display(LinkQueue*); //显示队列
int main(void){
LinkQueue p;
p.rear=nullptr;
p.front=nullptr;
Input(&p);
Enqueue(&p,5);
Display(&p);
cout<<endl;
Dequeue(&p);
Display(&p);
return 0;
}
int Isempty(LinkQueue* p){
return p->front==nullptr&&p->rear==nullptr;
}
void Input(LinkQueue* p){
int x;
while(cin>>x){
Queue* s=new Queue;
s->data=x;
s->next=nullptr;
if(Isempty(p)){
p->front=p->rear=s;
}else{
p->rear->next=s;
p->rear=s;
}
}
cin.clear();
cin.ignore();
}
int Enqueue(LinkQueue* p,int x){
Queue* s=new Queue;
s->next=nullptr;
s->data=x;
p->rear->next=s;
p->rear=s;
return 1;
}
int Dequeue(LinkQueue* p){
if(Isempty(p)){
cout<<"The queue is empty."<<endl;
}else{
int x=p->front->data;
Queue* temp=p->front;
p->front=temp->next;
delete(temp);
return x;
}
}
void Display(LinkQueue* p){
Queue* temp=p->front;
while(temp!=nullptr){
cout<<temp->data<<endl;
temp=temp->next;
}
}