• 链式存储的队列


    今天由于一些事情耽误了,本来可以写得更多的,但是却只完成了一部分,那就从下周开始加快进度吧。

    对于链式的队列,我们需声明一个头指针和尾指针front和rear,当进队的时候,我们就用尾插法插进链表,当出队的时候,我们就从头开始出。

    下面就是相关的代码,由于今天的一些事情耽误了(懒才是最重要的原因),所以就没有打,若有看不懂的,可以在评论区评论。

    typedef struct SNode {
    int data;
    struct SNode *next;
    }*queue;

    typedef struct QNode{
    queue front;
    queue rear;
    }*Queue;

    Queue Create ();
    void En (Queue q,int x);
    int De (Queue q);
    int IsEmpty (Queue q);

    int main ()
    {
    Queue q = Create();
    int i;
    for(i= 1;i < 6;i++){
    En(q,i);
    }
    for(i = 0;i < 4;i++){
    printf("%d ",De(q));
    }

    }

    int IsEmpty (Queue q)
    {
    return (q->front == q->rear);
    }
    int De (Queue q)
    {
    if(IsEmpty(q)) {//若满就不能删除。
    printf("The queue is empty!");
    return -1;
    }else {
    queue p;
    p = q->front->next;//从队头依次出队。
    q->front = q->front->next;
    return (p->data);
    }
    }
    void En (Queue q, int x )
    {
    queue p = (queue)malloc(sizeof(struct SNode));
    p->data = x;
    p->next = NULL;
    q->rear->next= p;//利用尾指针插入q。
    q->rear= p;//插入后,尾指针再指向队尾。
    }

    Queue Create ()
    {
    Queue q = (Queue)malloc(sizeof(struct QNode));
    q->front = q->rear = (queue)malloc(sizeof(struct SNode));
    q->front->next = NULL;

    return q;
    }

    函数的名字等等设计得不怎么好,以后我会慢慢修改方面得错误。

    今天就写到这里吧,还有一些任务未完成,全堆到一起了,看来下面今天不怎么轻松,加油,期待下一次!

  • 相关阅读:
    桌面快捷方式图标问题的修复
    Visual Studio 2015简体中文版
    开源资源记录
    如何在InstallShield的MSI工程中调用Merge Module的Custom Action
    使用Open Live Writer写博客
    使用Window Media Player网页播放器
    Nginx日志常用统计分析命令
    Jetty 开发指南:嵌入式开发示例
    Jetty 开发指南: 嵌入式开发之HelloWorld
    使用Semaphore控制对资源的多个副本的并发访问
  • 原文地址:https://www.cnblogs.com/ranyang/p/13799611.html
Copyright © 2020-2023  润新知