数据结构之用数组和链表实现队列

本文解决的问题是:

10. 分别用数组和链表实现队列功能。

10.1 用数组实现队列,代码如下

/****************************10、分别用数组和链表实现队列功能*************************************/
/****************10.1、用数组实现队列功能*****************/
#include<stdio.h>
#include<stdlib.h>

int count=0;//当前队列内元素个数
//入队
void push(int x,int array[])
{
	if(count>=100)
	{
		printf("队列已满!!\n");
	}else
	{
		array[count++]=x;
	}
}
//出队
void pop(int array[])
{
	if(count==0)
	{
		printf("队列为空!!\n");
	}else{
		int i;
		for(i=0;i<count;i++)
		{
			array[i]=array[i+1];
		}
		count--;
	}
}
//打印队列信息
void print_queue(int array[])
{
	if(count==0)
	{
		printf("队列为空");
	}else{
		int i;
		printf("-->入 ");
		for(i=count-1;i>=0;i--)
		{
			printf("%d ",array[i]);
		}
		printf("-->出\n");
	}
}

int main()
{
	int x;
	int data;
	int array[100]={0};
	char r;
	bool t=true;
	while(t)
	{
		printf("请输入你要执行的操作:1:入队;2:出队\n");
		scanf("%d",&x);
		if(x == 1)
		{
			//入队
			printf("请输入你要入队的元素:\n");
			scanf("%d",&data);
			push(data,array);
			printf("入队后的队列数据为:\n");
			print_queue(array);
		}else if(x == 2){
			//出队
			pop(array);
			printf("出队后的队列数据为:\n");
			print_queue(array);
		}
		printf("是否继续:y:是;  n:否\n");
		scanf("%s",&r);
		if(r == 'n')
		{
			t = false;
		}
	}
	printf("结束\n");
	return 0;
}


10.2 用链表实现队列,代码如下:

/****************************10、分别用数组和链表实现队列功能*************************************/
/****************10.2、用链表实现队列功能*****************/
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
	int data;
	LNode *next;
}LNode,*LinkList;

//入队
void push(int x,LinkList L)
{
	LinkList s;
	s=(LinkList)malloc(sizeof(LNode));
	s->data = x;  
    s->next = L->next;  
    L->next = s;
}
//出队
void pop(LinkList p)
{
	if(p == NULL)
	{
		printf("队列为空!!\n");
	}else{
		LinkList q;
		q=(LinkList)malloc(sizeof(LNode));
		q = p->next;
		while(q->next != NULL)
		{
			p = p->next;
			q = q->next;
			printf("%d   ",p->data);
			printf("%d   ",q->data);
		}
		//printf("%d   ",p->data);
		p->next = NULL;
	}
}
//打印队列元素
void printf_queue(LinkList p)
{
	if(p == NULL)
	{
		printf("队列为空!!\n");
	}else{
		printf("-->入 ");
		while(p != NULL)
		{
			printf("%d ",p->data);
			p = p->next;
		}
		printf("-->出\n");
	}
}
int main()
{
	int x;
	int data;
	LinkList L;
	L=(LinkList)malloc(sizeof(LNode));
	L->next = NULL;
	char r;
	bool t=true;
	while(t)
	{
		printf("请输入你要执行的操作:  1:入队;  2:出队;\n");
		scanf("%d",&x);
		if(x == 1)
		{
			printf("请输入要入队的元素:\n");
			scanf("%d",&data);
			//入队
			push(data,L);
			printf("入队后的队列元素为:\n");
			printf_queue(L->next);
		}else if(x == 2)
		{
			//出队
			pop(L->next);
			printf("出队后的队列元素为:\n");
			printf_queue(L->next);
		}	
		printf("是否继续:  y:是;   n:否;\n");
		scanf("%s",&r);
		if(r == 'n')
		{
			t = false;
		}
	}
	printf("结束!!\n");
	return 0;
}

如有疑问,请及时提出,谢谢!!

猜你喜欢

转载自blog.csdn.net/zly412934578/article/details/79081324