⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkqueue.cpp

📁 用C语言编写实现数据结构方面的例子
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct  qnode
{
	int data;
	struct qnode *next;
}Linkqlist;//链队列结点的类型


typedef struct 
{
	struct qnode *front;//头指针
	struct qnode *rear;//尾指针
}Linkqueue;//将头,尾指针封装在一起的链队列


void LinkqueueInit(Linkqueue *p)
{		
	p->front=(Linkqlist *)malloc(sizeof(Linkqlist));	
	p->rear=p->front;
    p->front->next=NULL;
}

void LinkqueueIn(Linkqueue *p,int x)
{
	p->rear->next=(Linkqlist *)malloc(sizeof(Linkqlist));
	p->rear=p->rear->next;

	if (p->rear)
	{
		p->rear->data=x;
		p->rear->next=NULL;
	}
}

void LinkqueueOut(Linkqueue *p)
{
	Linkqlist *q;

        int e;
        if (p->front==p->rear)
		{
			printf("队列已空");
		     exit(0);
		}
        else 
		{
			q=(p->front)->next;
            (p->front)->next=q->next;
            e=q->data;
	    
            printf("出列元素:%d",e);	
		}
         if(p->rear==q)
           p->rear=p->front;
		 
		 if (q)
		 {
			free(q);
		 }

}

int LinkqueueGethead(Linkqueue *p)
{
	int k;
	if (p->front==p->rear)
	{
		return -1;
	}
	else
	{
		k=(p->front)->next->data;
		return k;
	}

	


}
void LinkqueueDestory(Linkqueue *p)
{
	while (p->front)
	{
		p->rear=p->front->next;
		free(p->front);
		p->front=p->rear;
	}
}

void LinkqueueDisplay(Linkqueue *p)
{
	int data;
	Linkqlist *q;
	q=p->front->next;

	 printf("链队列:\n");
	if (p->front==p->rear)
	{
		printf("链队列已空\n");
		exit(0);
	}
	else
		while (q)
		{
		 	 data=q->data;
	         printf("%d->",data);
			 q=q->next;
		}
}



int main()
{
	int i;
	int n;//队列长度
	int num;//队列元素
	int flag=1;//标志
	char ch;
	int select;//选择
	int in;//新增队列元素
	int gh;


	Linkqueue head;
   
	LinkqueueInit(&head);
   
	printf("请输入链队列长度:\n");
    scanf("%d",&n);

   for (i=0;i<n;i++)
   {
	   printf("请输入队列元素:\n");
       scanf("%d", &num);
       LinkqueueIn(&head,num);
   }
   LinkqueueDisplay(&head);
   printf("\n");

   while (flag)
   {
	  printf("select 1 --- destory() \n");
    //  printf("select 2 --- empty  () \n");
       printf("select 3 --- LinkqueueGethead() \n");
       printf("select 4 ---LinkqueueIn() \n");
       printf("select 5 --- LinkqueueOut() \n");
       printf("select 6 --- LinkqueueDisplay() \n");
       printf("please select (1--5):");
       scanf("%d",&select);
//	   LinkqueueDisplay()LinkqueueIn()LinkqueueOut()
//	   LinkqueueGethead()
	   switch(select)
	   {
       case 1:
		   LinkqueueDestory(&head);
	   break;
	   case 3:
		   gh=LinkqueueGethead(&head);
		   printf("队头:%d\n",gh);
		   LinkqueueDisplay(&head);
		   break;
	   case 4:
		   printf("请输入新增队列元素:\n");
           scanf("%d", &in);
           LinkqueueIn(&head,in);
		   LinkqueueDisplay(&head);
		   break;
	   case 5:
		   LinkqueueOut(&head);
		   LinkqueueDisplay(&head);
		   break;
	   case 6:
		   LinkqueueDisplay(&head);
		   break;
	   }

	   printf("继续操作(Y|N):");
	   getchar();
	   ch=getchar();
	   if (ch=='n'||ch=='N')
	   {
		   flag=0;
	   }
	   else
		   flag=1;
   }


	return 0;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -