| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 428 人关注过本帖
标题:队列初体验~
只看楼主 加入收藏
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
收藏
已结贴  问题点数:5 回复次数:1 
队列初体验~
初学队列~把代码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编辑过]

2017-03-07 23:34
mnmn4429
Rank: 4
等 级:业余侠客
帖 子:64
专家分:245
注 册:2017-2-21
收藏
得分:5 
呵呵,你这是在军训啊,哈哈
把入队,出对改成稍息,立正
有意思
2017-03-08 00:04
快速回复:队列初体验~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014289 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved