本文解决的问题是:
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、分别用数组和链表实现队列功能*************************************/
/****************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;
}
如有疑问,请及时提出,谢谢!!