链式队C语言实现

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_44833327/article/details/102689594

链式队列的操作为求队的长度取队首进队删队首遍历队列

#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

猜你喜欢

转载自blog.csdn.net/qq_44833327/article/details/102689594