队列初体验~
初学队列~把代码show一下~
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Qnode
{
int data;
struct Qnode* next;
}Qnode,*QueuePrt;
typedef struct
{
QueuePrt front,rear;
}LinkQueue;
void initQueue(LinkQueue* s);//创造一个队列
void insertQueue(LinkQueue* s,int e);//入队
void deletQueue(LinkQueue* s,int* e);//出队
void destroyQueue(LinkQueue* s); //删除队列
int Queuelen(QueuePrt head,QueuePrt end); //获取队列相对长度
int judge_emptyQueue(LinkQueue* s);//判断队列是否为空
int main()
{
LinkQueue s={0};//新建队列
int e=0;
int i=0;
initQueue(&s);
puts("入队:");
for (i=0;i!=15;++i)
{
insertQueue(&s,i+1); //入队
printf("%3d ",i+1);
}
puts("");
printf("队列长度:%d\n",Queuelen(s.front,s.rear));
puts("出队:");
while (judge_emptyQueue(&s)==0)//当队列不为空时出队
{
deletQueue(&s,&e); //出队
printf("%3d ",e);
}
destroyQueue(&s); //释放队列
puts("");
return 0;
}
void initQueue(LinkQueue* s)
{
s->front=s->rear=(QueuePrt)malloc(sizeof (Qnode));//创建一个队列
if (s->front==NULL)//如果创建失败就退出程序
{
puts("创建失败");
exit(0);
}
s->front->next=NULL; //初始化数据
s->front->data=0;
}
void insertQueue(LinkQueue* s,int e) //入队
{
QueuePrt p=NULL; //申请一个空间
p=(QueuePrt)malloc(sizeof (Qnode));
if (p==NULL)
{
puts("加入失败");
return ;
}
p->next=NULL;//p的下一个指针指向NULL
p->data=0;
s->rear->data=e; //队尾入队
s->rear->next=p; //rear为对列尾部指向于p
s->rear=p; //把对列尾部指针移向于p
}
void deletQueue(LinkQueue* s,int* e)
{
QueuePrt p=NULL; //初始化一个队列指针
if (judge_emptyQueue(s)) //如果队列为空
{
puts("删除失败");
return ;
}
p=s->front; //p指向队头
*e=p->data; //获取队头元素
s->front=s->front->next; //移动队头指针
free(p); //释放原来的队头
}
void destroyQueue(LinkQueue* s)
{
QueuePrt p=s->front;
if (s->front==NULL)
return ;
while (s->front->next)
{
s->front=s->front->next;
free(p);
p=s->front;
}
free(p);
s->front=NULL;
}
int judge_emptyQueue(LinkQueue* s)//判断队列是否为空
{
if (s->front)
return s->front==s->rear;
else
return 1;
}
int Queuelen(QueuePrt head,QueuePrt end)
{
int i=0;
QueuePrt p=head;
if (head==NULL||end==NULL)
return 0;
while (p!=end&&p)
{
p=p->next;
++i;
}
if (p==NULL)
{
puts("队列长度出错了");
return -1;
}
return i;
}
[此贴子已经被作者于2017-3-7 23:39编辑过]



