• 数据结构-编程实现一个单链表的打印


    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

    运行结果:

  • 相关阅读:
    用tcpdump 分析如何建立与关闭tcp连接 邓维 博客园
    Javascript基础与面向对象基础~Javascript中的语句如何被执行,如何改变执行顺序
    Javascript基础与面向对象基础~第一讲 啥叫编程,啥叫程序员
    将不确定变为确定~本机是否可以调试带域名的网站
    将不确定变为确定~为什么发布项目时用release环境更好些
    c/c++ 调用dos 命令
    C++基类与派生类的转换
    c++ max_elment和min_element
    c++ 无法链接的外部变量
    转:c++ 基类转换为派生类
  • 原文地址:https://www.cnblogs.com/lovemi93/p/7581893.html
Copyright © 2020-2023  润新知