注:若有错误或需要补充的内容请告知,新手上路,谢谢。
#include<stdlib.h>
#include<stdio.h>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<ctype.h>
using namespace std;
/*************结构体*************/
/*链式队列*/
typedef struct qnode
{
int data;
struct qnode *next;
}qnode;
typedef struct
{
qnode *front_,*rear_;
}linkqueue;
/***************基本操作*****************/
/*初始化*/
linkqueue *init_queue()
{
linkqueue *q;
q=(linkqueue*)malloc((sizeof(linkqueue)));
q->front_=(qnode*)malloc(sizeof(qnode));
q->front_->next=NULL; //带对头结点
q->rear_=q->front_;
return q;
}
/*判断队空*/
bool is_empty_linkqueue(linkqueue q)
{
if(q.front_==q.rear_)
{
return true;
}
else
{
return false;
}
}
/*入队*/
void enqueue(linkqueue *q,int e)
{
qnode *s;
s=(qnode*)malloc(sizeof(qnode));
s->data=e;
s->next=NULL;
q->rear_->next=s;
q->rear_=s;
}
/*出队*/
void dequeue(linkqueue *q,int &e)
{
if(is_empty_linkqueue(*q))
{
printf("队空\n");
}
else
{
qnode *s;
s=q->front_->next;
e=s->data;
q->front_->next=s->next;
if(q->rear_==s) //只有一个元素
{
q->rear_=q->front_;
}
free(s);
}
}
/*销毁队列*/
void delete_linkqueue(linkqueue *q)
{
qnode *s;
while(!is_empty_linkqueue(*q))
{
s=q->front_->next;
q->front_->next=s->next;
if(q->rear_==s) //只有一个元素
{
q->rear_=q->front_;
}
free(s);
}
printf("队列销毁成功\n");
}
int main()
{
int l,e;
linkqueue *s;
s=init_queue();
printf("请输入需要入队的元素个数:");
scanf("%d",&l);
printf("请依次输入入队的元素:");
for(;l>0;l--)
{
scanf("%d",&e);
enqueue(s,e);
}
//delete_linkqueue(s);
printf("依次出队的元素为:");
while(!is_empty_linkqueue(*s))
{
dequeue(s,e);
printf("%d",e);
}
printf("\n");
return 0;
}