#include<iostream>
#include<cstdio>
using namespace std;
typedef struct node
{
int data;
struct node*next;
}Node;
typedef struct queue
{
Node*front;//投指针
Node*rear;//尾指针
}queue;
Node *init_node()
{
Node *q=(Node*)malloc(sizeof(Node));
if(q==NULL) exit(0);
return q;
}
queue *init_queue()
{
queue *p=(queue*)malloc(sizeof(queue));
if(p==NULL) exit(0);
p->front=NULL;
p->rear=NULL;
return p;
}
int empty_queue(queue *q)
{
//如果真的是空的话
if(q->front==NULL) return 1;
else return 0;
}
void push_queue(queue *q,int data)
{
Node *p=init_node();
p->data=data;
p->next=NULL;
if(empty_queue(q))
{
//如果队列是空的话
q->front=p;
q->rear=p;
}
else
{
//尾指针向后移动即可
q->rear->next=p;
q->rear=p;
}
cout<<"元素已经入队成功!"<<endl;
}
void pop_queue(queue *q)
{
Node *p=q->front;
if(empty_queue(q))
{
cout<<"栈中没有元素!"<<endl;
}
if(q->front==q->rear)
{
//此时站内只有一个元素
//两端都NULL
q->front=NULL;
q->rear=NULL;
free(p);
}
else
{
q->front=p->next;
free(p);
}
cout<<"元素已经出队成功!"<<endl;
}
void display_queue(queue *q)
{
Node *p=init_node();
p=q->front;
if(empty_queue(q))
{
cout<<"该栈是空栈!"<<endl;
return ;
}
int pos=1;
while(p)
{
cout<<"第"<<pos++<<"个元素的值为:"<<p->data<<endl;
p=p->next;
}
}
int main()
{
queue *q=init_queue();
cout<<"*******************************"<<endl;
cout<<"执行入队操作!"<<endl;
push_queue(q,1);
push_queue(q,2);
push_queue(q,3);
push_queue(q,4);
push_queue(q,5);
display_queue(q);
cout<<"*******************************"<<endl;
cout<<"执行出队操作!(操作两次)"<<endl;
pop_queue(q);
pop_queue(q);
display_queue(q);
cout<<"*******************************"<<endl;
cout<<"所有操作执行完毕!"<<endl;
cout<<"*******************************"<<endl;
return 0;
}
顺序队列的基本操作
最新推荐文章于 2024-10-11 19:40:26 发布