这里记录顺序队列,主要是在c++中遇到了自定义结构体无法用c++中的#include<queue>解决了,所以了解了一下顺序队列
主要功能有,顺序队列
1,进队
2,出队
3,得到队首元素
4,得到队尾元素
5,得到队列长度
6,判断队列是否为空
这里有一个自定义的Node结构体,是用来做测试的:
代码:
#include <iostream>
using namespace std;
typedef struct Node{
int data;
struct Node* next;
};
typedef struct queue{
struct Node* n[100];
int front;
int rear;
}Queue;
Queue q;
void Init_queue(){ //初始化队列
q.front=0;
q.rear=0;
}
void push_queue(Node *p){ //入队
q.n[++q.rear]=p;
}
Node* pop_queue(){ //出队
return q.n[++q.front];
}
Node* front_queue(){ //得到队顶元素
return q.n[q.front+1];
}
Node* back_queue(){ //得到队尾元素
return q.n[q.rear];
}
int empty_queue(){ //判断队列是否为空
return q.front==q.rear;
}
int size_queue(){ //队列的长度
return q.rear-q.front;
}
void Init_Node(Node *&p){
Node *l=p;
p->next=NULL;
}
int insert_Node(Node *&p,int i,int m){
Node *l=p;
int j=0;
while(l&&j<i-1){
j++;
l=l->next;
}
if(!l||j>i-1){
return 0;
}
Node *s=new Node;
s->data=m;
s->next=l;
l->next=s;
l=s;
l->next=NULL;
return 1;
}
int main(){
Node *p=new Node;
int m;
int i=0;
Init_Node(p); //初始化Node
cout<<"插入Node数据:(输入-1结束)";
while(1){
cin>>m;
if(m==-1){
break;
}
//插入Node数据
insert_Node(p,++i,m);
}
//初始化队列
Init_queue();
//展示链表中元素
Node *p1=p->next;
while(p1!=NULL){
//进队
push_queue(p1);
p1=p1->next;
}
cout<<"顺序栈(主要是为了解决自定义结构体数据类型)"<<endl;
//队列大小
cout<<"队列长度:"<<size_queue()<<endl;
cout<<"队尾元素:"<<back_queue()->data<<endl;
cout<<"队首元素:"<<front_queue()->data<<endl;
cout<<"队列数据:";
while(!empty_queue()){
//得到队顶元素
Node *p1=front_queue();
cout<<p1->data<<" ";
//出队
pop_queue();
}
return 0;
}
结果截图: