zoukankan      html  css  js  c++  java
  • C语言数据结构 头尾指针数组的综合应用

    题目:输入n个10以内的正整数,每输入一个数x(0<=x<10),就把它插入到第x号队列中。最后把10个队中的非空队列,按照队列号从大到小的顺序串接成一条链,并输出改链的所有元素。

    解:

    这里创建两个指针数组,一个是头指针数组qh[],一个为尾指针数组qt[]。例如输入的数字为5时,为5 malloc出一个QNode节点,然后让qh[5]头指针来指向,而qt[5]也指向5这个节点,因为值为5的节点的队列只有一个节点;

    当下一个输入的值也为5的时候,新的节点接到qt[5]指针的后面,让qt[5]指向这个节点;这样以qh[5]为开头的队列就有两个元素了;

    当当前输入的值为1时,创建关于1的节点之后,1这个节点被qh[1]所指向,qt[1]也指向当前的节点,若后续在出现相同的值的节点时,只需要qt[1]来指向就可以了。

    以上是如何创建队列

    下面是连接成为完整的链队:

    创建一个new头节点链队

    使用for循环在指针数组当中走,若发现当前指针有指向,则让new链接上当前队列即可

    代码:(为方便,这里直接规定了输入个数和具体的值)

    #include<stdio.h>
    #include<stdbool.h>
    #include<stdlib.h>
    typedef struct node{
        int data;
        struct node *next;
    }QNode;
    bool insert(QNode *QH[],QNode *QT[],int num)
    {
       if(num>9&&num<0)
           return false;
        QNode *s=(QNode *)malloc(sizeof(QNode));
        s->data=num;
        s->next=NULL;
    
        if(QH[num]==NULL)//若指针无指向
        {
            QH[num]=s;
            QT[num]=s;
        }
        else//若当前指针有指向,则在当前指向之后添加元素
        {
            QT[num]->next=s;//尾部指向s
            QT[num]=s;//尾部移到s处
        }
        return true;
    }
    void creat_queue(QNode *QH[],QNode *QT[])
    {
        int a[10]={1,2,2,1,4,5,6,7,3,0};
        for(int i=0;i<10;i++)
            insert(QH, QT, a[i]);
    }
    void link_list(QNode *qh[],QNode *qt[],QNode *new)
    {
    //    QNode *head=NULL,*tail=NULL;
        QNode *p=new;//头指针为p,p后面接每一个数组的链表
        for(int i=0;i<10;i++)
        {
            if(qh[i]!=NULL)
            {
                p->next=qh[i];
                p=qt[i];
            }
        }
        p->next=NULL;
    }
    void initivate(QNode *a[]){
        for(int i=0;i<10;i++)
            a[i]=NULL;
    }
    void print(QNode *new)
    {
        QNode *p=new->next;
        while(p!=NULL){
            printf("%d	",p->data);
            p=p->next;
        }
        printf("
    ");
    }
    int main(){
        QNode *QH[10];
        QNode *QT[10];
        QNode new={10000,NULL};
        initivate(QH);//初始化两个指针数组
        initivate(QT);
        creat_queue(QH, QT);//创建头指针和为指针,按照题意指向对应的位置
        link_list(QH, QT,&new);//将指针数组所指向的头尾全部串成一个完整的链表
        print(&new);//读出链表
    }
  • 相关阅读:
    关于checkbox的一篇博客
    如何快速学习
    for循环下的取值问题
    vue的自动更新原理
    关于word-wrap的用法;
    2016年百度面试题
    编写代码的原则
    null和defined的区别
    js的模块化加载
    springmvc注解
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13718899.html
Copyright © 2011-2022 走看看