美文网首页C语言
C语言单链表的创建与遍历

C语言单链表的创建与遍历

作者: 晏南风_ | 来源:发表于2019-08-20 21:30 被阅读0次

    建立一个链表存放输入的整数。使链表中从链头至链尾的结点排列顺序正好和整数的输入顺序相同(称为先进先出链表或“队列”,即最先建立的结点为链头,最后建立的结点为链尾)。

    1.创建结点的结构体类型

    
    typedef struct _node
    
    {
    
        int num;
    
        struct _node * next;
    
    }node;
    
    

    每一个结点包含存放的数据指向下一结点的指针

    注:结构体本身不能含有同类型的结构,但是它可以含有指向同类型结构的指针。

    2.建立一个链表

    (1)声明一个头指针head,并使其具有初值NULL,再声明一个暂时保存当前新建结点存储地址的指针p,最后声明一个指向链尾的指针tail,并使其具有初值NULL

    
    node * head = NULL, *p, *tail = NULL;
    
    

    (2)为新建的结点分配内存,并使p指向该结点。

    
    p = (node *)malloc(sizeof(node));
    
    

    (3)判断新建结点p是否为第一个结点(head是否指向NULL),是则使head指向p,否则使当前链尾结点的指针指向p(使当前链尾结点与新建结点链接,生成新的链尾)。

    
    if (head == NULL)
    
        head = p;
    
    else
    
        tail->next = p;
    
    

    (4)将数据存入新建的结点,并使新建的结点称为链表中最后一个结点,即链尾。

    
    p->num = n;
    
    p->next = NULL;
    
    

    (5)此时已经生成了新的链尾结点,所以使链尾结点tail指向新的链尾结点。

    
    tail = p;
    
    

    (6)重复步骤(2)到(5)直到结束。

    3.遍历链表(逐个读取链表中所有结点的过程)。

    (1)使遍历指针p指向链头。

    (2)如果链表不为空则输出当前结点存放的数据,否则结束。

    (3)每输出一个结点之后使p指向下一个结点。

    (4)重复(2)到(3)直到结束。

    
    p = head;
    
    while (p != NULL)
    
    {
    
        printf("%d ", p->num);
    
        p = p->next;
    
    }
    
    

    4.完整代码运行。

    
    #include<stdio.h>
    
    #include<stdlib.h>
    
    typedef struct _node
    
    {
    
        int num;
    
        struct _node * next;
    
    }node;
    
    int main(void)
    
    {
    
        node * head = NULL, *p, *tail = NULL;
    
        int n;
    
        while(scanf("%d", &n) == 1)//当输入不为整数时结束
    
        {
    
            p = (node *)malloc(sizeof(node));
    
    
    
            if(head == NULL)
    
              head = p;
    
            else
    
              tail->next = p;
    
    
    
            p->num = n;
    
            p->next = NULL;
    
            tail = p;
    
        }
    
    
    
        p = head;
    
        while (p != NULL)
    
        {
    
            printf("%d ", p->num);
    
            p = p->next;
    
        }
    
        printf("\n");
    
    
    
        return 0;
    
    }
    
    

    试例

    输入:2 4 1 8 9 q

    输出:2 4 1 8 9

    相关文章

      网友评论

        本文标题:C语言单链表的创建与遍历

        本文链接:https://www.haomeiwen.com/subject/cqdwsctx.html