(1)设计一个使用队头指针和计数器胡顺序循环循环队列抽象数据类型,其中包括:初始化,入队列,出队列,取队头元素肯判断队列是否非空;
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#include "conio.h"
#define MAX 80
typedef struct
{
int data[MAX]
int front,rear
int num
}SeQue
SeQue *Init_SeQue()
{
SeQue *s
s=new SeQue
s->front=s->rear=MAX-1
s->num=0
return s
}
int Empty_SeQue(SeQue *s)
{
if(s->num==0)
return 1
else
return 0
}
int In_SeQue(SeQue *s,int x)
{
if(s->num==MAX)
return 0
else
{
s->rear=(s->rear+1)%MAX
s->data[s->rear]=x
s->num++
return 1
}
}
int Out_SeQue(SeQue *s,int *x)
{
if(Empty_SeQue(s))
return 0
else
{
s->front=(s->front+1)%MAX
*x=s->data[s->front]
s->num--
return 1
}
}
void Print_SeQue(SeQue *s)
{
int i,n
i=(s->front+1)%MAX
n=s->num
while(n>0)
{ printf("%d ",s->data[i])
i=(i+1)%MAX
n--
}
}
void main()
{
SeQue *s
int k,flag,x
s=Init_SeQue()
do{
printf("\\\")
printf("\\t\\t\\t循环顺序队列\")
printf("\\t\\t\\t***********************\")
printf("\\t\\t\\t**1-入队**\")
printf("\\t\\t\\t**2-出队**\")
printf("\\t\\t\\t**3-判 队 空**\")
printf("\\t\\t\\t**4-队列显示**\")
printf("\\t\\t\\t**0-返回**\")
printf("\\t\\t\\t***********************\")
printf("\\t\\t\\t 请输入菜单项(0-4):")
scanf("%d",&k)
switch(k)
{
case 1:
printf("\请输入入队元素:")
scanf("%d",&x)
flag=In_SeQue(s,x)
if(flag==0)
printf("\队满不能入队!按任意键返回..")
else
printf("\元素已入队!按任意键返回..")
getch()
system("cls")
break
case 2:
flag=Out_SeQue(s,&x)
if(flag==0)
printf("\队列空出队失败!按任意键返回..")
else
printf("\队列头元素已出队~!按任意键返回..")
getch()
system("cls")
break
case 3:
flag=Empty_SeQue(s)
if(flag==1)
printf("\该队列为空!按任意键返回..")
else
printf("\该队列不为空!按任意键返回..")
getch()
system("cls")
break
case 4:
printf("\该队列元素为:")
Print_SeQue(s)
printf("\按任意键返回..")
getch()
system("cls")
break
}
}while(k!=0)
}
双端队列数据类型typedef
struct
qnode
{
DataType
data
struct
qnode
*next
}LQNode
typedef
struct
{
LQNode
*front
LQNode
*rear
}LQueue
尾出队:首先判断队列是否为空,如为空则提示队列为空,如不为空则将队尾结点
赋给临时结点。将队尾结点的前驱指针赋给队列的队尾指针,再将队尾结
点的后继指针置空。最后返回临时结点或所需要的数据。