zoukankan      html  css  js  c++  java
  • 链式队列

    具体代码:

    //队列就是用Front和TailC操作节点形成队列(与栈相比就是变成了尾插入,获取都是从头获取元素)
    #include<stdio.h>
    #include<stdlib.h>
    
    //节点定义
    struct Node
    {
    int data;
    struct Node* next;
    };
    //节点创建
    struct Node* createNode(int data)
    {
    struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
    newNode->data=data;
    newNode->next=NULL;
    return newNode;
    }
    //队列定义
    struct Queue
    {
    struct Node* frontNode;
    struct Node* tailNode;
    int size;
    };
    //队列创建(需要建立一个队列的变量,再返回一个指针,用这个指针操作)
    struct Queue* createQueue()
    {
    struct Queue* myQueue=(struct Queue*)malloc(sizeof(struct Queue));
    myQueue->frontNode=myQueue->tailNode=NULL;
    myQueue->size=0;
    return myQueue;
    }
    //插入元素
    void push(struct Queue* myQueue,int data)
    {
    struct Node* newNode=createNode(data);
    if(myQueue->size==0)
        {
        myQueue->frontNode=myQueue->tailNode=newNode;
        }
    else
        {
        myQueue->tailNode->next=newNode;
        myQueue->tailNode=newNode;
        }
    myQueue->size++;
    }
    //删除元素
    void pop(struct Queue* myQueue)
    {
    if(myQueue->size==0)
    {
    printf("The Queue is empty!
    ");
    }
    else
    {
    struct Node* deNode=myQueue->frontNode;
    myQueue->frontNode=myQueue->frontNode->next;
    free(deNode);
    }
    myQueue->size--;
    }
    //获取队列头元素
    int front(struct Queue* myQueue)
    {
    if(myQueue->size==0)
    {
    printf("The Queue is empty!
    ");
    }
    else
    {
    return myQueue->frontNode->data;
    }
    }
    //判断队列是否为空
    int isEmpty(struct Queue* myQueue)
    {
    if(myQueue->size==0)
    {
    return 0;
    }
    else
    {
    return 1;
    }
    }
    
    int main()
    {
        struct Queue* myQueue=createQueue();
        push(myQueue,1);
        push(myQueue,2);
        push(myQueue,3);
        while(isEmpty(myQueue))
        {
        printf("%d ",front(myQueue));
        pop(myQueue);
        }
    printf("
    ");
    return 0;
    }

    效果展示:

     自己练习的:

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct Node
    {
    char data;
    struct Node* next;
    }NODE,*LPNODE;
    typedef struct stack
    {
    int size;
    LPNODE stackTop;
    }STACK,*LPSTACK;
    LPNODE createNode(char data)
    {
    LPNODE newNode=(LPNODE)malloc(sizeof(NODE));
    newNode->data=data;
    newNode->next=NULL;
    return newNode;
    }
    LPSTACK createStack()
    {
        LPSTACK st=(LPSTACK)malloc(sizeof(STACK));
        st->size=0;
        st->stackTop=NULL;
        
        return st;
    }
    
    void insertNode(LPSTACK st,char data)
    {
    LPNODE newNode=createNode(data);
    if(st->size==0)
    {
    st->stackTop=newNode;
    st->size++;
    
    }
    else
    {
    newNode->next=st->stackTop;//最重要的一步,这里并不是newNode->next=st->stackTop->next;而是直接连接上stackTop指向的,再移动指针
    st->stackTop=newNode;
    st->size++;
    }
    
    }
    
    
    void printStack(LPSTACK st)
    {
        LPNODE pmove=st->stackTop;
    while(pmove!=NULL)
    {
    printf("%c ",pmove->data);
    pmove=pmove->next;
    }
    }
    int main()
    {
        LPSTACK st=createStack();
        insertNode(st,'A');
        insertNode(st,'B');
        insertNode(st,'C');
        printStack(st);
    return 0;
    }

     自己练习的(结果为 A B C)

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct Node
    {
    char data;
    struct Node* next;
    }NODE,*LPNODE;
    typedef struct Queue
    {
    int size;
    LPNODE frontNode;
    LPNODE rearNode;
    }QUEUE,*LPQUEUE;
    LPNODE createNode(char data)
    {
    LPNODE newNode=(LPNODE)malloc(sizeof(NODE));
    newNode->data=data;
    newNode->next=NULL;
    return newNode;
    }
    LPQUEUE createQueue()
    {
    LPQUEUE qu=(LPQUEUE)malloc(sizeof(QUEUE));
    qu->frontNode=NULL;
    qu->rearNode=NULL;
    qu->size=0;
    return qu;
    }
    void insertNode(LPQUEUE qu,char data)
    {
        LPNODE newNode=createNode(data);
    if(qu->size==0)
        {
        qu->frontNode=qu->rearNode=newNode;
        qu->size++;
        }
    else
        {
        qu->rearNode->next=newNode;
        qu->rearNode=newNode;
        qu->size++;
        }
    }
    
    void printQueue(LPQUEUE qu)
    {
    LPNODE pmove=qu->frontNode;
    while(pmove!=NULL)
        {
        printf("%c ",pmove->data);
        pmove=pmove->next;
        }
    }
    
    int main()
    {
        LPQUEUE qu=createQueue();
        insertNode(qu,'A');
        insertNode(qu,'B');
        insertNode(qu,'C');
        printQueue(qu);
    return 0;
    }
  • 相关阅读:
    习题10-2 递归求阶乘和(15 分)
    在过滤器中得到模型状态信息
    理解OAuth 2.0
    asp.net mvc 控制器的依赖注入(使用Ninject)
    web.routing 学习
    深度优先和广度优先的基础应用
    数的全排
    C# 表达式树
    C#中RSA的简单使用
    select into 和insert into select
  • 原文地址:https://www.cnblogs.com/miaobo/p/12441930.html
Copyright © 2011-2022 走看看