zoukankan      html  css  js  c++  java
  • 数据结构-编程实现一个单链表的打印

    1:首先参考别人的单链表的创建及打印,代码如下:

    #include "stdafx.h"
    #include<stdio.h>
    #include<malloc.h>
    typedef struct LNode
    {
        int data;
        struct LNode *next;
    }LNode;
    /*上面只是定义了一个结构体类型,并未实际分配内存空间
    只有定义了变量才分配内存空间*/
    LNode *creat(int n)
    {
        int i;
        LNode *head, *p1, *p2;
        /*head用来标记链表,p1总是用来指向新分配的内存空间,
        p2总是指向尾结点,并通过p2来链入新分配的结点*/
        int a;
        head = NULL;
        p2 = NULL;
        for (i = 1; i <= n; i++)
        {
            p1 = (LNode *)malloc(sizeof(LNode));
            /*动态分配内存空间,并数据转换为(struct LNode)类型*/
            printf("请输入链表中的第%d个数:", i);
            scanf_s("%d", &a);
            p1->data = a;
            if (head == NULL)/*指定链表的头指针*/
            {
                head = p1;
                p2 = p1;
            }
            else
            {
                p2->next = p1;
                p2 = p1;
            }
            p2->next = NULL;/*尾结点的后继指针为NULL(空)*/
        }
        return head;/*返回链表的头指针*/
    }
    void main()
    {
        int n;
        LNode *q;
        printf("请输入链表的长度:/n");
        scanf_s("%d", &n);
        q = creat(n);/*链表的头指针(head)来标记整个链表*/
        printf("/n链表中的数据:/n");
        while (q)/*直到结点q为NULL结束循环*/
        {
            printf("%d ", q->data);/*输出结点中的值*/
            q = q->next;/*指向下一个结点*/
        }
    }
    View Code

    运行结果:

    2:再将上面的代码改进,把打印改进成函数的形式,代码如下:

    #include "stdafx.h"
    #include<stdio.h>
    #include<malloc.h>
    typedef struct LNode
    {
        int data;
        struct LNode *next;
    }LNode;
    /*上面只是定义了一个结构体类型,并未实际分配内存空间
    只有定义了变量才分配内存空间*/
    LNode *creat(int n)
    {
        int i;
        LNode *head, *p1, *p2;
        /*head用来标记链表,p1总是用来指向新分配的内存空间,
        p2总是指向尾结点,并通过p2来链入新分配的结点*/
        int a;
        head = NULL;
        p2 = NULL;
        for (i = 1; i <= n; i++)
        {
            p1 = (LNode *)malloc(sizeof(LNode));
            /*动态分配内存空间,并数据转换为(struct LNode)类型*/
            printf("请输入链表中的第%d个数:", i);
            scanf_s("%d", &a);
            p1->data = a;
            if (head == NULL)/*指定链表的头指针*/
            {
                head = p1;
                p2 = p1;
            }
            else
            {
                p2->next = p1;
                p2 = p1;
            }
            p2->next = NULL;/*尾结点的后继指针为NULL(空)*/
        }
        return head;/*返回链表的头指针*/
    }
    
    void print(LNode *head)
    {
        LNode *p;
        p = head;
        while (p)/*直到结点q为NULL结束循环*/
        {
        printf("%d ", p->data);/*输出结点中的值*/
        p = p->next;/*指向下一个结点*/
        }
    }
    void main()
    {
        int n;
        LNode *q;
        printf("请输入链表的长度:");
        scanf_s("%d", &n);
        q = creat(n);/*链表的头指针(head)来标记整个链表*/
        print(q);
    
    }
    View Code

    运行结果:

     3:最终将自己的代码改进,代码如下:

    // ConsoleApplication15.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <malloc.h>
    
    typedef struct node//定义链表结构体
    {
        int data;//节点内容
        node *next;//指向结构体的指针,下一个节点
    }node;
    
    node *create()//创建单链表
    {
        int i = 0;//链表中数据的个数
        node *head, *p, *q;//这些的本质是节点的地址
        int x = 0;
        head = NULL;
        q = NULL;//初始化q,q代表末节点
        p = NULL;
        while (1)
        {
            printf("please input the data:");
            scanf_s("%d", &x);
            if (x == 0)
                break;//data为0时创建结束
            p = (node *)malloc(sizeof(node));//用于每次输入链表的数据
            p->data = x;
            if (++i == 1)//链表头的指针指向下一个节点
            {
                head = p;
                q = p;
            }
            else
            {
                q->next = p;//连接到链表尾端
                q = p;
            }
            q->next = NULL;/*尾结点的后继指针为NULL(空)*/
        }
        return head;
    }
    
    int length(node *head)
    {
        int len = 0;
        node *p;
        p = head->next;
        while (p != NULL)
        {
            len++;
            p = p->next;
        }
        return len;
    }
    
    void print(node *head)
    {
        node *p;
        p = head;
        while (p)/*直到结点q为NULL结束循环*/
        {
            printf("%d ", p->data);/*输出结点中的值*/
            p = p->next;/*指向下一个结点*/
        }
    }
    
    int main()
    {
        node *head = create();//创建单链表
        printf("Length:%d
    ", length(head));
        print(head);
        return 0;
    }
    View Code

    运行结果:

  • 相关阅读:
    kafka 消息推送报错"dial tcp: lookup iZ2ze2k3******7abjcsyZ on 219.141.140.10:53: no such host"
    MacBook安装Homebrew的国内安装脚本 告别龟速下载安装
    docker info命令的使用和返回结果描述
    Python requests.post方法中data与json参数区别
    redis master-slave python switch logic (升级版,序列七)
    ELKF日志收集系统
    MySQL 中的concat函数使用
    程序员的街舞“梦”
    第一份工作没有工资,信不信
    Java中的享元设计模式,涨姿势了!
  • 原文地址:https://www.cnblogs.com/lovemi93/p/7581893.html
Copyright © 2011-2022 走看看