实现无头结点链队列的基本操作。

2023-04-12

【问题描述】


实现无头结点链队列的基本操作。


【输入形式】


输入若干个整数(以空格分隔),其中0表示做出队操作,不为0的整数为入队元素。


【输出形式】


若出队错误输出“error”;


若最后队列为空,则输出“empty”;


若最后队列非空,依次输出队列的全部元素。


【样例输入1】


1 2 3 4 5 6
【样例输出1】


1 2 3 4 5 6


【样例输入2】


1 2 3 0 0 4 0 5
【样例输出2】


4 5


【样例输入3】


1 0 2 0 3 0
【样例输出3】


empty


【样例输入4】


1 0 2 0 0 3 0 0 0
【样例输出4】


error


#include
#include

typedef  int ElemType;
typedef struct QNode
{
    ElemType data;
    struct QNode *next;
}QNode,*QList;

typedef struct Queue
{
    QList front;
    QList rear;
}Queue;
int initQueue(Queue *Q);
int queueEmpty(Queue *Q);
int enQueue(Queue *Q,ElemType e);
int deQueue(Queue *Q,ElemType *e);
int queueLength(Queue *Q);
int getHead(Queue *Q,ElemType *e);
/*构造一个空队列*/
int initQueue(Queue *Q)
{
    Q->front=Q->rear=NULL;
    return 1;
}
/*入队操作*/
int enQueue(Queue *Q,ElemType e)
{
	QList q=(QNode *)malloc(sizeof(QNode));
	if(!q)
	return 0;
    q->data=e;
	q->next=NULL;
	if(Q->front==NULL&&Q->rear==NULL)
	{
		Q->front=q;
        Q->rear=q;
		
	}
	else
	{
		Q->rear->next=q;
        Q->rear=q;
        
	}
		
	
	return 1;
	
}
/*出队操作*/
int deQueue(Queue *Q,ElemType *e)
{
	QList s=Q->front;
	if(Q->front==NULL&&Q->rear==NULL)
	return 0;
	*e=(Q->front->data);
	if(Q->front==Q->rear&&Q->front!=NULL)
	{
        free(s);
		Q->front=NULL;
		Q->rear=NULL;
	}
	else{
        Q->front=Q->front->next;
		free(s);
		
	}

	return 1;






}
/*返回队列的长度*/
int queueLength(Queue *Q)
{
    int n=0;
    QList p=Q->front;
    while(p)
    {
        n++;
        p=p->next;
    }
    return n;
}
/*判断队列是否为空*/
int queueEmpty(Queue *Q)
{
    if(Q->front==Q->rear&&Q->front==NULL)
        return 1;
    else
        return 0;
}
/*取队头元素*/
int getHead(Queue *Q,ElemType *e)
{
    if(!Q->front)
        return 0;
    *e=Q->front->data;
    return 1;
}
int main()
{
    Queue q;
    int e;
    initQueue(&q);
    while(scanf("%d",&e)==1)
    {
        if(e)
        {
            if(!enQueue(&q,e))
            {
                break;
            }
        }else
        {
            if(!deQueue(&q,&e))
            {
                printf("error\n");
                return 0;
            }
        }
    }
    if(queueEmpty(&q))
    {
        printf("empty\n");
    }else
    {
        while(deQueue(&q,&e))
        {
            printf("%d ",e);
        }
    }
    return 0;
}







本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。

免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com