一、PTA实验作业

  1. 本周要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。
  2. 1、顺序表选择一题(6-2,6-3,7-1选一题),代码必须用顺序结构抽象数据类型封装
  3. 2、单链表选择一题(6-1不能选)
  4. 3、有序表选择一题

选题:

  1. 17-1 最长连续递增子序列(20 分)
  2. 26-4 集合的基本运算(单链表)(10 分)
  3. 37-3 两个有序序列的中位数(25 分)

题目1:7-1 最长连续递增子序列

1、设计思路

  1. #头文件
  2. 结构体LNode{
  3. 定义整型变量x; //用来存储记录的数
  4. 定义整型变量y; //用来记录连续的个数
  5. }A[100001];
  6. int main(){
  7. 定义整型变量i,j; //用于循环
  8. 定义 n; //用于记录序列的长度
  9. 定义 max<-1,c; //max记录连续最大值
  10. //c记录连续最大的开始
  11. 输入n;
  12. /*****输入序列*****/
  13. for i<-0 to n-1 do
  14. 输入A[i].x;
  15. end
  16. /*将连续个数初始化为1*/
  17. for i<-0 to n-1 do
  18. A[i].y<-1;
  19. end
  20. /*****判断递增*****/
  21. for i<-0 to n-1 do
  22. for j<-i+1 to n-1 do
  23. if(后一个数的值 > 前一个数的值)
  24. then A[i].y++; //i处的记录加一
  25. else break;
  26. end
  27. end
  28. /*****判断最大值*****/
  29. for i<-0 to n-1 do
  30. if( i的连续的个数 > max )
  31. then max<-A[i].y;
  32. c<-i; //从i开始的序列
  33. end
  34. /*****输出最大子列*****/
  35. for i<-c to c+max-2 do
  36. 输出 "A[i].x " //末尾有空格
  37. end
  38. 输出"A[c+max-1].x" //末尾没空格
  39. }

2、代码截图



3、PTA提交列表说明

  1. 第一次编译错误是因为没有修改编译器的缘故,C++的代码用C的编译器。

题目2:6-4 集合的基本运算(单链表)

1、设计思路

  1. /*********裁判测试程序**********/
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. typedef char ElemType;
  5. typedef struct LNode //定义单链表结点类型
  6. {
  7. ElemType data;
  8. struct LNode *next;
  9. } LinkList;
  10. void DispList(LinkList *L); //输出链表元素,每个结点元素值以空格符间隔,以换行符结束。
  11. void CreateListR(LinkList *&L,ElemType a[],int n); //用数组元素值尾插法创建链表。
  12. void DestroyList(LinkList *&L);//销毁链表。
  13. void sort(LinkList *&L) //单链表元素递增排序。
  14. void Union(LinkList *ha,LinkList *hb,LinkList *&hc) //求两有序集合ha、hb的并集hc。
  15. void InterSect(LinkList *ha,LinkList *hb,LinkList *&hc) //求两有序集合ha、hb的的交集hc。
  16. void Subs(LinkList *ha,LinkList *hb,LinkList *&hc) //求两有序集合ha、hb的差集hc。
  17. int main()
  18. {
  19. LinkList *ha,*hb,*hc;
  20. ElemType a[100]={0};
  21. ElemType b[100]={0};
  22. int i=0;
  23. char ch;
  24. while((ch=getchar())!='\n')
  25. {
  26. a[i++]=ch;
  27. }
  28. CreateListR(ha,a,i);
  29. i=0;
  30. while((ch=getchar())!='\n')
  31. {
  32. b[i++]=ch;
  33. }
  34. CreateListR(hb,b,i);
  35. printf("A: ");DispList(ha);
  36. printf("B: ");DispList(hb);
  37. sort(ha);
  38. sort(hb);
  39. printf("sorted A: ");DispList(ha);
  40. printf("sorted B: ");DispList(hb);
  41. Union(ha,hb,hc);
  42. printf("Union C: ");DispList(hc);
  43. InterSect(ha,hb,hc);
  44. printf("InterSect C: ");DispList(hc);
  45. Subs(ha,hb,hc);
  46. printf("Subs C: ");DispList(hc);
  47. DestroyList(ha);
  48. DestroyList(hb);
  49. DestroyList(hc);
  50. return 0;
  51. }
  52. /* 请在这里填写答案 */
  1. /*输出链表元素,每个结点元素值以空格符间隔,以换行符结束。*/
  2. void DispList(LinkList *L){
  3. 定义结构体类型指针p;
  4. p指向L;
  5. while p //当p不为空时进入循环
  6. do 输出p->next;
  7. p <- p->next;
  8. end
  9. 输出回车;
  10. }
  11. /*用数组元素值尾插法创建链表。*/
  12. void CreateListR(LinkList *&L,ElemType a[],int n){
  13. 定义结构体类型指针p,q;
  14. L申请结构体内存空间;
  15. L->next <- NULL;
  16. P指向L;
  17. 定义整型变量 i<-0;
  18. while n--
  19. do q申请结构体内存空间;
  20. q->data <- a[i++]; //赋值后,i++
  21. q->next <- 0;
  22. p->next 指向 q;
  23. p 指向 p->next;
  24. end
  25. L 指向 L->next; //去除空头
  26. }
  27. /*****销毁链表*****/
  28. void DestroyList(LinkList *&L){
  29. 定义结构体类型指针p;
  30. while L
  31. do P指向L;
  32. L <- L->next;
  33. 清除p的内存空间;
  34. end
  35. }
  36. /***单链表元素递增排序。***/
  37. void sort(LinkList *&L) {
  38. if !L //如果L为空,则返回
  39. then return;
  40. 定义整型变量 temp; //用于交换数据
  41. 定义结构体类型指针p,q;
  42. for p<-L to p为空
  43. for q<-L to q为空
  44. if p指向的数据 < q指向的数据
  45. then 交换p,q所指向的数据
  46. end
  47. end
  48. }
  49. /***求两有序集合ha、hb的并集hc。***/
  50. void Union(LinkList *ha,LinkList *hb,LinkList *&hc){
  51. 定义结构体类型指针pa,pb,pc,pl;
  52. pa 指向 ha;
  53. pb 指向 hb;
  54. hc申请结构体内存空间
  55. hc->next <- NULL ;
  56. pc 指向hc;
  57. while pa&&pb //pa,pb均不为空
  58. do pl申请结构体内存空间
  59. if pa指向的数据 < pb指向的数据
  60. then pl指向的数据 <- pa指向的数据
  61. pl->next <- NULL;
  62. pc->next 指向 pl;
  63. pa 指向 pa->next;
  64. elseif pa指向的数据 > pb指向的数据
  65. then pl指向的数据 <- pb指向的数据
  66. pl->next <- NULL;
  67. pc->next 指向 pl;
  68. pb 指向 pb->next;
  69. else //pa指向的数据 = pb指向的数据
  70. then pl指向的数据 <- pa指向的数据
  71. pl->next <- NULL;
  72. pc->next 指向 pl;
  73. pa 指向 pa->next;
  74. pb 指向 pb->next;
  75. pl 指向 pl->next;
  76. end
  77. /****将不为空的剩余数据依次添加到pl后面****/
  78. while pa
  79. do pl申请结构体内存空间
  80. pl指向的数据 <- pa指向的数据
  81. pl->next <- NULL;
  82. pc->next 指向 pl;
  83. pa 指向 pa->next;
  84. pc 指向 pc->next;
  85. end
  86. while pb
  87. do pl申请结构体内存空间
  88. pl指向的数据 <- pb指向的数据
  89. pl->next <- NULL;
  90. pc->next 指向 pl;
  91. pb 指向 pb->next;
  92. pc 指向 pc->next;
  93. end
  94. hc 指向 hc->next; //去除空头
  95. }
  96. /***求两有序集合ha、hb的的交集hc。***/
  97. void InterSect(LinkList *ha,LinkList *hb,LinkList *&hc) {
  98. 定义结构体类型指针pa,pb,pc,pl;
  99. pa 指向 ha;
  100. pb 指向 hb;
  101. hc申请结构体内存空间
  102. hc->next <- NULL;
  103. pc 指向 hc;
  104. while pa&&pb //pa,pb均不为空
  105. do pl申请结构体内存空间
  106. if pa指向的数据 = pb指向的数据
  107. then pl指向的数据 <- pa指向的数据
  108. pl->next <- NULL;
  109. pc->next 指向 pl;
  110. pa 指向 pa->next;
  111. pb 指向 pb->next;
  112. pc 指向 pc->next;
  113. elseif pa指向的数据 < pb指向的数据
  114. then pa 指向 pa->next;
  115. else //pa指向的数据 > pb指向的数据
  116. pb 指向 pb->next;
  117. end
  118. hc 指向 hc->next; //去除空头
  119. }
  120. /****求两有序集合ha、hb的差集hc。*****/
  121. void Subs(LinkList *ha,LinkList *hb,LinkList *&hc){
  122. //hc已经是两个有序集合ha,hb的交集
  123. 定义结构体类型指针pa,pc,p,pl;
  124. pa 指向 ha;
  125. pc申请结构体内存空间
  126. pc->next <- NULL;
  127. p 指向 hc;
  128. while pa&&pb //pa,pb均不为空
  129. do if hc指向的数据 = pa指向的数据
  130. pa 指向 pa->next;
  131. hc 指向 hc->next;
  132. continue;
  133. else pl申请结构体内存空间
  134. pl指向的数据 <- pa指向的数据;
  135. pl->next <- NULL;
  136. pc->next 指向 pl;
  137. pa 指向 pa->next;
  138. pc 指向 pc->next;
  139. end
  140. while pa
  141. do pl申请结构体内存空间
  142. pl指向的数据 <- pa指向的数据
  143. pl->next <- NULL;
  144. pc->next 指向 pl;
  145. pa 指向 pa->next;
  146. pc 指向 pc->next;
  147. end
  148. p 指向 p->next;
  149. hc 指向 p;
  150. }

2、代码截图













3、PTA提交列表说明

  1. 第一次提交错是因为求并集和差集的函数有错:
  2. 并集中的错误是因为一个判断少了一个;
  3. 而差集的错误是因为一开始没有发现,hc已经是hahb的交集。

题目3:7-3 两个有序序列的中位数

1、设计思路

  1. #头文件
  2. #定义宏 MaxSize 100000
  3. 重定义结构体 LNode{
  4. 定义int类型的 data;
  5. 定义结构体指针 next;
  6. }为LinkList;
  7. 函数声明:
  8. void CreateListR( LinkList *&L,ElemType a[],int n ); // 创建链表
  9. void Union(LinkList *ha,LinkList *hb,LinkList *&hc); //求并集
  10. int main(){
  11. 定义int类型的n;
  12. 定义int类型的数组a[MaxSize];
  13. 定义int类型的数组b[MaxSize];
  14. 输入n;
  15. 定义int类型的i;
  16. for i=0 to n-1
  17. 输入a[i]
  18. end
  19. CreateListR(h1,a,i); //将数组a的值创建为单链表
  20. for i=0 to n-1
  21. 输入b[i]
  22. end
  23. CreateListR(h2,b,i); //将数组a的值创建为单链表
  24. Union(h1,h2,h3); //将单链表的h1,h2合并为h3
  25. i<-1;
  26. r 指向 h3;
  27. while i<n
  28. do r指向r->next;
  29. i++
  30. end
  31. 输出 r->data;
  32. return 0;
  33. }
  34. void CreateListR( LinkList *&L,ElemType a[],int n ){
  35. 定义结构体指针p,q;
  36. L申请指针内存空间;
  37. L->next <- NULL;
  38. p 指向 L
  39. 定义int类型的 i<-0;
  40. while n--
  41. do q申请指针内存空间
  42. q指向的数据 <- a[i];
  43. q->next <- NULL;
  44. p->next 指向 q;
  45. p 指向 p->next;
  46. end
  47. L 指向 L->next
  48. }
  49. void Union(LinkList *ha,LinkList *hb,LinkList *&hc){
  50. 定义结构体类型指针pa,pb,pc,pl,pm;
  51. pa 指向 ha;
  52. pb 指向 hb;
  53. hc申请结构体内存空间
  54. hc->next <- NULL ;
  55. pc 指向hc;
  56. while pa&&pb //pa,pb均不为空
  57. do pl申请结构体内存空间
  58. if pa指向的数据 < pb指向的数据
  59. then pl指向的数据 <- pa指向的数据
  60. pl->next <- NULL;
  61. pc->next 指向 pl;
  62. pa 指向 pa->next;
  63. elseif pa指向的数据 > pb指向的数据
  64. then pl指向的数据 <- pb指向的数据
  65. pl->next <- NULL;
  66. pc->next 指向 pl;
  67. pb 指向 pb->next;
  68. else //pa指向的数据 = pb指向的数据
  69. then pl指向的数据 <- pb指向的数据
  70. pl->next <- NULL;
  71. pc->next 指向 pl;
  72. pb 指向 pb->next;
  73. pm申请指针内存空间
  74. pm指向的数据 <- pa指向的数据
  75. pm->next <- NULL;
  76. pc->next 指向 pm;
  77. pa 指向 pa->next;
  78. pc 指向 pc->next;
  79. end
  80. /****将不为空的剩余数据依次添加到pl后面****/
  81. while pa
  82. do pl申请结构体内存空间
  83. pl指向的数据 <- pa指向的数据
  84. pl->next <- NULL;
  85. pc->next 指向 pl;
  86. pa 指向 pa->next;
  87. pc 指向 pc->next;
  88. end
  89. while pb
  90. do pl申请结构体内存空间
  91. pl指向的数据 <- pb指向的数据
  92. pl->next <- NULL;
  93. pc->next 指向 pl;
  94. pb 指向 pb->next;
  95. pc 指向 pc->next;
  96. end
  97. hc 指向 hc->next; //去除空头
  98. }

2、代码截图









3、PTA提交列表说明

  1. 第一次提交编译错误原因:未修改编译器;
  2. 接下来的错误均为最小N的错误,当n=1时,应该输出最小的数,而我输出的是一个地址,经过调试发现,在并集里面有一句代码“if( ha->next==NULL&&hb->next==NULL ) return;”导致并集为空,

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


1、顺序表PTA排名

2.链表PTA排名

3.我的总分

  1. 本次两个题集的总分为227分,自评分为2

三、本周学习总结


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

  1. 1、如何安排:
  2. 首先必须是在上课认真听讲,完成随堂练习和互动,其次,在课堂外,多加训练,完成pta题集,并在时间允许的情况下,完成更多的题目,如pat等平台上的题。
  3. 2、我对我的安排感觉还比较满意,只是能空余出来的时间不多,完成pta上的题目花费太多的时间,对链表的操作还不太熟悉,需要多加联系

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

  1. 线性表是nn0时为空表)个数据元素的有限集合,他的特点是:
  2. 1)存在唯一的一个被叫做“第一个”的数据元素,存在唯一的一个被叫做“最后一个”的数据元素。
  3. 2)除了第一个数据元素外,其它的数据元素都有一个前驱。除了最后一个数据元素外,其它的数据元素都有一个后继。
  4. 线性表主要有两种实现方式:一种为顺序表,另一种为链表
  5. 1)顺序表的实现主要为数组,算法比较简单,可以容易的找到第i个储存的内容,但是在插入新元素,或者删除一个元素的时候,相对麻烦。
  6. 2)链表的逻辑结构严谨,在进行插入和删除操作时较为简便,但是,在查找元素的时候比较麻烦。

3.代码Git提交记录截图

Data_Structure02-线性表的更多相关文章

  1. 线性表Linearlist

    顺序存储,链式存储,索引存储,散列存储 基本运算 SLIST         1.置空表 void SetNull(&L)     2.求长度 int Length(L)     3.取元素 ...

  2. 数据结构(Java描述)之线性表

    基础概念 数据结构:是相互之间存在一种或多种关系的数据元素的集合. 逻辑结构和物理结构 关于数据结构,我们可以从逻辑结构和物理结构这两个维度去描述 逻辑结构是数据对象中数据元素之间的关系,是从逻辑意义 ...

  3. JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表

    Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...

  4. 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。

    //归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...

  5. Java集合类学习笔记(各种线性表性能分析)

    ArrayList.LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表. Queue代表了队列,Deque代表了双端队列. 一般来说,由于数组以一块连续内存区来保存所有的数组 ...

  6. 动态分配的顺序线性表的十五种操作—C语言实现

    线性表 定义:是最常用的,也是最简单的数据结构,是长度为n个数据元素的有序的序列. 含有大量记录的线性表叫文件 记录:稍微复杂的线性表里,数据元素为若干个数据项组成,这时把一个数据元素叫记录 结构特点 ...

  7. Java Se :线性表

    Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...

  8. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  9. 数据结构算法C语言实现(一)---2.2线性表的顺序表示和实现

    注意: 虽然是用C语言实现,但是考虑到使用了一个C++的特性----引用以简化代码,所以所有的代码均以cpp作为后缀,用g++编译(以后不做说明). g++版本: 一.简述 本节主要讲述线性表的顺序实 ...

  10. C#线性表之顺序表

    线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract), 线性结构的特点是结构中的数据元素之间存在一对一的线性关系. 这种一对一的关系指的是数据元素之间的位置关系,即: ...

随机推荐

  1. 【hive】多表插入

    from or_table insert overwrite table1 name1 select … insert into table2 name2 select … 注意:select 后边不 ...

  2. VS2015常用快捷键总结(转)

    生成解决方案 F6,生成项目Shift+F6 调试执行F5,终止调试执行Shift+F5 执行调试Ctrl+F5 查找下一个F3,查找上一个Shift+F3 附加到进程Ctrl+Alt+P,逐过程F1 ...

  3. CMDB后台管理(AutoServer)

    1.表结构设计 from django.db import models class UserProfile(models.Model): """ 用户信息 " ...

  4. LeetCode OJ:Merge Intervals(合并区间)

    Given a collection of intervals, merge all overlapping intervals. For example,Given  [1,3],[2,6],[8, ...

  5. 关于python中urllib.urlencode的时候出错:UnicodeEncodeError: ‘ascii’的记录

    原文我参见了:http://hi.baidu.com/setcookie/item/ddc6b694b1f13435336eeb3c 为毛我要费事的写下了,就是为了让自己记录一下,下面的也是直接摘录过 ...

  6. js 删除数组的指定元素

    //为数组对象增加相应的的方法,直接调用数组的removeByValue方法即可删除指定元素 Array.prototype.removeByValue = function (val) { for ...

  7. gcc中关于静态库和动态库使用(转)

    转自:http://blog.chinaunix.net/uid-25871104-id-3069931.html 1,如何生成静态库 静态库只是一堆object对象的集合,使用ar命令可以将.o文件 ...

  8. Android SDK无法更新解决办法

    一.设置SDK代理 启动Android SDK Manager,选择菜单 Tools ->Options -> 代理地址: mirrors.opencas.cn 代理端口: 80 如下图: ...

  9. C++里的单体类实现

    单件模式是设计模式中最简单的模式了. 定义: 确保一个类只有一个实例,并提供一个全局的访问点. 把一个类设计成自己管理的一个单独实例,同时避免其他类再自行生成实例(所以构造函数用protect或pri ...

  10. EasyPlayerPro安卓流媒体播放器实现Android H.265硬解码流程

    本文转自EasyDarwin团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/74502627 H.265编码算法作为新一代视频编码标准 ...