回 帖 发 新 帖 刷新版面

主题:再发一贴---(数据结构-->>链式队列的实现)

/* 再发一贴---(数据结构-->>链式队列的实现)
听了雪光风剑 的建议这一次不用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);
}


    

回复列表 (共4个回复)

沙发

可惜你还是void main这种不合标准的写法

板凳

呵呵~~
还差一个函数~~

DestroyLQueue

用来销毁队列,释放分配的内存~~

3 楼

结束程序运行之前销毁队列
好习惯

4 楼

明白,谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册