您的位置:首页 > 理论基础 > 数据结构算法

链式的队列的创建、插入、删除、遍历、取队首元素

2016-10-24 10:07 881 查看
链式的队列的创建、插入、删除、遍历、取队首元素上午操作。

我们今天将的方式是比较简单的方式,没有动态的分配空间。

#include <stdio.h>
typedef struct
{
int queue[100];
int front;
int rear;
} sqqueue;
//创建一个空的队列
int initqueue(sqqueue *sq)
{
if(sq!=NULL)
{
sq->front=sq->rear=0;
return 1;
}
return 0;
}
//入队(把新元素加到队尾)
int enqueue(sqqueue *sq,int d)
{
//
if(sq==NULL)
{
printf("队列未创建,入队失败!\n");
return 0;
}
if(sq->rear>=100)
{
printf("队列已满,入队失败!\n");
return 0;
}
else
{
sq->queue[sq->rear]=d;
sq->rear=sq->rear+1;
printf("入栈的元素是%d\n",d);
return 1;
}
}
int outqueue(sqqueue *sq,int d)
{
if(sq==NULL)
{
printf("队列未创建,出队失败!\n");
return 0;
}
if(sq->front==sq->rear)
{
printf("队列为空,出队失败!\n");
return 0;
}
else
{
d=sq->queue[sq->front];
sq->front++;
printf("出栈的元素是%d\n",d);
return 1;
}
}

int traverseQueue(sqqueue *sq)
{
int d;
if(sq==NULL)
{
printf("队列未创建,遍历失败!\n");
return 0;
}
if(sq->front==sq->rear)
{
printf("队列为空,遍历失败!\n");
return 0;

}
else
{
int i=sq->front;
while(i!=sq->rear)
{
d=sq->queue[i];
printf("%d->",d);
i++;
}
return 1;
}
}

int getHead(sqqueue *sq,int *d)
{
if(sq==NULL)
{
printf("队列未创建,遍历失败!\n");
return 0;
}
if(sq->front==sq->rear)
{
printf("队列为空,遍历失败!\n");
return 0;

}
*d=sq->queue[sq->front];
printf("%d\n",*d);
printf("取队首元素成功!\n");
return 1;
}

void main()
{
sqqueue sq;
int choice,data,d;
if(initqueue(&sq)==1)
printf("队列创建成功!\n");
else
printf("队列创建失败!\n");
while(1)
{
printf("-----------------------------------------\n");
printf("     1、入栈\n");
printf("     2、出栈\n");
printf("     3、遍历\n");
printf("     4、取队首元素\n");
printf("     5、退出\n");

printf("-----------------------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入入栈元素:\n");
scanf("%d",&data);
if(enqueue(&sq,data))
{
printf("%d入栈成功!\n",data);
}
break;
case 2:
if(outqueue(&sq,d))
printf("出栈成功!\n");
break;
case 3:
if(traverseQueue(&sq))
printf("遍历成功!\n");
break;
case 4:
getHead(&sq,&d);
break;
case 5:
return 0;
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐