• 第02次作业线性表


    一、题目:

    题目1:6-2 jmu-ds-单链表逆置

    题目2:6-3 jmu-ds-链表倒数第m个数

    题目3:7-1 两个有序链表序列的合并

    具体操作:

    题目1:6-2 jmu-ds-单链表逆置

    1.本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表为带头结点链表。

    要实现函数有3个分别为:

    • CreateList:创建单链表。输入n个正整数,按照输入顺序创建单链表。其中 L 是指向链表的头指针。 n 输入的链表结点个数;要求尾插法建表
    • ReverseList:将链表L逆置。
    • PrintList:输出L为头指针的单链表内容。

    2.设计思路:

     void CreateList(List &L,int n)
    {
        定义两个空链表p和s;
        int i=0,x;
        初始化链表;
        p=L;
        for(i=0;i<n;i++)//n为节点数
        {    
            scanf("%d",&x);
            s=new ListNode;
            创建的s链表存取数据;
            将p->next指向s链表
            p=s;
            实现尾插法插入;
        }
        p->next=NULL;
    }   
    void ReverseList(List &L)
    {
        ListNode *p, *q;  构造p、q两个链表
            使P指向链表第一个元素  ;
            断开头结点与链表  ;
        while(p != NULL)  
        {  
          用前插法构建新的链表,和原来的相反  
           L->next = q;  
        } 
    }  
    void PrintList(List L)
    {
        ListNode *p;
        p=L->next;
        if(p!=NULL)
        {
            链表的输出,实现逆置输出;
        }
        else
        printf("NULL"); 
    }

    3.代码截图:

    4.PTA提交列表说明

     

    题目2:6-3 jmu-ds-链表倒数第m个数

    1.已知一个带有表头节点的单链表,查找链表中倒数第m个位置上的节点。

    • 输入要求:先输入链表结点个数,再输入链表数据,再输入m表示倒数第m个位置。
    • 输出要求,若能找到则输出相应位置,要是输入无效位置,则输出-1

    2.设计思路:

    int Find( LinkList L, int m ){
        int i=0,n, find; 
        定义两个结构体指针;
        h=L;  
        p=h->next;  
        find = n-m+1;//找到第m个位置的节点
        if(find<0){
          return -1;
        }
        while(p){  
          i++;  
        链表指针与第m个位置匹配,
         若相等则输出;
        若不等则继续寻找,直至找到;
        }  
        return p->data;  
    }

    3.代码截图

    4.PTA提交列表说明。

    题目3:7-1 两个有序链表序列的合并

    1.已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。

    输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−表示序列的结尾(−不属于这个序列)。数字用空格间隔。

    输出格式:

    在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL

    2.设计思路:

    void Init(LinkList &L)
    {
       申请初始化线性表
      创建头指针 }
    void ListCreate(LinkList &L)
    {
        L = new LNode;
        L->next = NULL;
        //创建线性表 
        //尾指针指向头结点
        int x;
        cin>>x;
        while(x != -1)
        {
            t = new LNode;
            创建空表
            接收数据
            cin>>x;
        }
        r->next = NULL;
    }    
    void ListPrint(LinkList &L)//打印有序链表
    {
        if(L->next != NULL)
        {
            LNode *p = L->next;//创建头指针
            while(p != NULL)
            {
               若非空则输出;
                p = p->next;//指针指向后移直至为NULL
            }
        }
        else
            cout<<"NULL";
        cout<<endl;
    }

    3.代码截图

    4.PTA提交列表说明。

    主要是没有在C++环境下编译运行;

    二、截图本周题目集的PTA最后排名

    1.顺序表PTA排名

    2.链表PTA排名

    PTA总分:133分

    自评:1分

    三、本周学习总结

    1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?

    安排时间比较少,比较不满意,课程越来越难,花的时间却越来越少,还是得从基础知识补起,有时间多花些在基础上面,才有进步吧。

    平时还要多去问问同学,多多浏览其他同学的博客,发现自己的不足;

    多打代码,有些知识点理解了,可是没去打过,到要亲手打的时候,一脸懵逼;

    2.谈谈你对线性表的认识?

    线性表好像有很多种,比如顺序表,链表,有序表之类的,总之大概是一类有线性存储的逻辑结构抽象出来的表吧。我也不大懂,去百度搜了一下,

    当做长知识,

    线性表是数据结构中最简单的数据存储结构,可以理解为“线性的表”。
    
    线性,是说数据在逻辑结构上具有线性关系。将具有线性关系的数据存储到计算机中所使用的存储结构称为线性表。
    
    线性关系指的是数据一个挨着一个,总体呈线性分布。就好比“老鹰捉小鸡”游戏中,小鸡们全都手拉着手,它们之间的关系就可以称为线性关系。
    
    换句话说,线性表中的数据在逻辑结构上相互挨着(手牵手),中间没有空隙。每个数据元素,在它的前面可以找到唯一一个数据和它挨着,后面也只有一个数据和它挨着。这样,数据在逻辑结构呈线性分布,称这样的存储结构为线性表。
    用线性表存储的数据有两个特点:
    存储的数据本身的类型一定保持相同,是int型就都是int型,是结构体就都是一种结构体。
    数据一旦用线性表存储,各个数据元素之间的相对位置就固定了。
    
    逻辑结构上相邻的数据在实际的物理存储中有两种形式:分散存储和集中存储。
    考虑到这两种情况,线性表分为两种,分别解决两种情况下数据的存储问题:
    数据元素在内存中集中存储,采用顺序表示结构,简称“顺序存储”;
    数据元素在内存中分散存储,采用链式表示结构,简称“链式存储”。

    3.代码Git提交记录截图

    暂时不会用,没了解太多。

    附加:码云用Git时,只实现了下载码云的文件,但是在本地仓库上传时卡住了。。。

  • 相关阅读:
    Ubuntu Windows双系统时差8小时问题解决
    linux无线网络配置
    Ubuntu 10.04上腾达W541U V2.0 无线网卡驱动的使用
    有些歌,放在这慢慢听
    [推荐]什么是程序员的优秀品质?
    如何阅读源代码
    Ubuntu中的有线、无线网络连接管理器──Wicd[译]
    linux下无线网卡解决方案之Ndiswrapper终极使用指南
    将jar文件做成exe可运行文件
    WOW裁缝1375详细攻略
  • 原文地址:https://www.cnblogs.com/zhangqingwang/p/8641425.html
Copyright © 2020-2023  润新知