主题:再发一贴---(数据结构-->>链式队列的实现)
/* 再发一贴---(数据结构-->>链式队列的实现)
听了雪光风剑 的建议这一次不用new来开辟空间了改用malloc;
呵呵--
以下是一个带头结点的链式队列..
*/
[color=0000FF]呵呵,各位编程爱好者辛苦了,本人除了爱好编程外同时也爱好制作网页,我的个人网站开通了,呵呵,希望各位朋友们光临,还希望能和爱好网页的朋友们互相交流http://online366.cctve.cn/ 我们是学生创业精英联盟[/color]
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
typedef struct node
{
int data;
struct node *next;
}Qnode;
typedef struct
{
Qnode *front,*rear;
}LQueue;
LQueue *Init_LQueue()
{
LQueue *s;
Qnode *p;
s=(LQueue*)malloc(sizeof(LQueue));
p=(Qnode*)malloc(sizeof(Qnode));
p->next=NULL;
s->front=s->rear=p;
return s;
}
int In_LQueue(LQueue *s,int x) /*入队列*/
{
Qnode *q; /*带头结点的链队*/
q=(Qnode*)malloc(sizeof(Qnode));
q->data=x;
q->next=NULL;
s->rear->next=q;
s->rear=q;
return 1;
}
int Empty_LQueue(LQueue *s) /*判队是否为空*/
{
if(s->front==s->rear)
return 1;
else
return 0;
}
int Out_LQueue(LQueue *s,int *x) /*出队*/
{
Qnode *q;
if(Empty_LQueue(s))
return 0;
else
{
q=s->front->next;
*x=q->data;
s->front->next=q->next;
free(q);
if(s->front->next==NULL)
s->rear=s->front;
return 1;
}
}
int Print_LQueue(LQueue *s) /*队列显示*/
{
Qnode *q=s->front->next;
if(Empty_LQueue(s))
{
printf("\n队列无元素!按任意键返回..");
return 0;
}
else
{printf("\n该队列元素为:\n");
while(q->next!=NULL)
{
printf("%d<<-- ",q->data);
q=q->next;
}
printf("%d",q->data);
}
}
void main()
{
LQueue *s;
int flag,k,x;
s=Init_LQueue();
do{
printf("\n\n\n");
printf("\t\t\t 链式队列应用子系统\n");
printf("\t\t\t**************************\n");
printf("\t\t\t** 1--入 队 列 **\n");
printf("\t\t\t** 2--出 队 列 **\n");
printf("\t\t\t** 3--判队列空 **\n");
printf("\t\t\t** 4--队列显示 **\n");
printf("\t\t\t** 0--返 回 **\n");
printf("\t\t\t**************************\n");
printf("\t\t\t 请选择菜单(0-4):");
scanf("%d",&k);
switch(k)
{
case 1:
printf("\n请输入要入队的元素:");
scanf("%d",&x);
In_LQueue(s,x);
printf("\n元素已入队!按任意键返回..");
getch();
system("cls");
break;
case 2:
flag=Out_LQueue(s,&x);
if(flag==0)
printf("\n队列空不能出队!按任意键返回..");
else
printf("\n队列的头元素已出队!按任意键返回..");
getch();
system("cls");
break;
case 3:
flag=Empty_LQueue(s);
if(flag)
printf("\n该队列为空!按任意键返回..");
else
printf("\n该队列不为空!按任意键返回..");
getch();
system("cls");
break;
case 4:
Print_LQueue(s);
printf("\n按任意键返回..");
getch();
system("cls");
break;
}
}while(k!=0);
}
听了雪光风剑 的建议这一次不用new来开辟空间了改用malloc;
呵呵--
以下是一个带头结点的链式队列..
*/
[color=0000FF]呵呵,各位编程爱好者辛苦了,本人除了爱好编程外同时也爱好制作网页,我的个人网站开通了,呵呵,希望各位朋友们光临,还希望能和爱好网页的朋友们互相交流http://online366.cctve.cn/ 我们是学生创业精英联盟[/color]
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
typedef struct node
{
int data;
struct node *next;
}Qnode;
typedef struct
{
Qnode *front,*rear;
}LQueue;
LQueue *Init_LQueue()
{
LQueue *s;
Qnode *p;
s=(LQueue*)malloc(sizeof(LQueue));
p=(Qnode*)malloc(sizeof(Qnode));
p->next=NULL;
s->front=s->rear=p;
return s;
}
int In_LQueue(LQueue *s,int x) /*入队列*/
{
Qnode *q; /*带头结点的链队*/
q=(Qnode*)malloc(sizeof(Qnode));
q->data=x;
q->next=NULL;
s->rear->next=q;
s->rear=q;
return 1;
}
int Empty_LQueue(LQueue *s) /*判队是否为空*/
{
if(s->front==s->rear)
return 1;
else
return 0;
}
int Out_LQueue(LQueue *s,int *x) /*出队*/
{
Qnode *q;
if(Empty_LQueue(s))
return 0;
else
{
q=s->front->next;
*x=q->data;
s->front->next=q->next;
free(q);
if(s->front->next==NULL)
s->rear=s->front;
return 1;
}
}
int Print_LQueue(LQueue *s) /*队列显示*/
{
Qnode *q=s->front->next;
if(Empty_LQueue(s))
{
printf("\n队列无元素!按任意键返回..");
return 0;
}
else
{printf("\n该队列元素为:\n");
while(q->next!=NULL)
{
printf("%d<<-- ",q->data);
q=q->next;
}
printf("%d",q->data);
}
}
void main()
{
LQueue *s;
int flag,k,x;
s=Init_LQueue();
do{
printf("\n\n\n");
printf("\t\t\t 链式队列应用子系统\n");
printf("\t\t\t**************************\n");
printf("\t\t\t** 1--入 队 列 **\n");
printf("\t\t\t** 2--出 队 列 **\n");
printf("\t\t\t** 3--判队列空 **\n");
printf("\t\t\t** 4--队列显示 **\n");
printf("\t\t\t** 0--返 回 **\n");
printf("\t\t\t**************************\n");
printf("\t\t\t 请选择菜单(0-4):");
scanf("%d",&k);
switch(k)
{
case 1:
printf("\n请输入要入队的元素:");
scanf("%d",&x);
In_LQueue(s,x);
printf("\n元素已入队!按任意键返回..");
getch();
system("cls");
break;
case 2:
flag=Out_LQueue(s,&x);
if(flag==0)
printf("\n队列空不能出队!按任意键返回..");
else
printf("\n队列的头元素已出队!按任意键返回..");
getch();
system("cls");
break;
case 3:
flag=Empty_LQueue(s);
if(flag)
printf("\n该队列为空!按任意键返回..");
else
printf("\n该队列不为空!按任意键返回..");
getch();
system("cls");
break;
case 4:
Print_LQueue(s);
printf("\n按任意键返回..");
getch();
system("cls");
break;
}
}while(k!=0);
}