版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
链式队列的操作为求队的长度取队首进队删队首遍历队列
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<iostream>
using namespace std;
typedef struct node{
int date ;
struct node *next;
}node,*queueptr;
typedef struct {
queueptr front;
queueptr rear;
}queue;
int show(queue *q)
{
if(q->front==q->rear){
printf("队列为空,无法遍历元素");
return 0;
}
queueptr p = q->front->next;
int i = 1;
while(p){
if(i!=1)
printf("\n"); //为了排版的好看,第一个元素不换行
int e = p->date;
printf("第%d个元素为: ",i++);
printf("%d ",e);
//如果QElemType的数据类型为int,也可以写成printf("%d\n",e);
p=p->next;
}
return 1;
}
int queuelength(queue *Q){
if(Q->front==Q->rear)
return -1;
queueptr p = Q->front->next;
int i=0;
while(p){
i++;
p=p->next;
}
return i;
}
int gethead(queue *Q,int &e){
if(Q->front->next==NULL)
return 0;
else
e = Q->front->next->date;
printf("队列的队头元素为: ");
return e;
}
int dequeue(queue *Q,int &e){
if(Q->front==Q->rear)
return 0;
queueptr p = Q->front->next;
e = p->date;
Q->front->next = p->next;
if(Q->rear==p)
Q->rear = Q->front;
free(p);
return 1;
}
int initqueue(queue *q)
{
q->front =q->rear=(queueptr)malloc(sizeof(node));
if(!q->front)exit(-2);
q->front->next=NULL;
return 1;
}
int enqueue(queue *q,int e)
{
queueptr p;
p=(queueptr)malloc(sizeof(node));
if(!p)exit(-2);
p->date =e;
p->next=NULL;
q->rear->next=p;
q->rear=p;
return 0;
}
int main()
{
int k,e,n;
queue s;
initqueue(&s);
printf("创建成功\n");
printf("向队中输入几个元素\n");
scanf("%d",&k);
for(int i=0;i<k;i++)
{
scanf("%d",&e);
enqueue(&s,e);
}
printf("输入结束\n");
show(&s);
printf("\n获取队的长度\n");
printf("%d\n",queuelength(&s));
printf("取队首\n");
printf("%d\n",gethead(&s,n)) ;
dequeue(&s,n);
printf("删除成功\n");
show(&s);
return 0;
}
不足之处请指出,来自hncj