博客作业2---线性表

一、PTA实验作业(5分)

1.题目1:6-3 顺序表删除重复元素

2. 设计思路(伪代码或流程图)

自定义函数void CreateSqList(List & L, int a[], int n)
定义变量i用于循环
for i = 0 to n-1
  赋a[i]的值给L -> data[i] 
end for
自定义函数void DelSameNode(List & L)
定义变量i用于循环,j用于二次循环,judge判断元素是否重复,k表示m的下标,m用于存储非重复的元素,d代表长度
定义m[maxsize]存储非重复的元素
令d=L -> length;
for i = 0 to d
令judge = 0
  for j = i-1 to 0
    若L -> data[j] 等于 L -> data[i]
       judge = 1
    若 judge= 0
       将该元素存入m[i]
     否则表示该元素重复,长度减一
  end for
end for
for i = 0 to L 的长度
  令L -> data[i] 等于 m[i]
end for
自定义函数void DispSqList(List L)
定义i用于循环
若不为空表,输出第一个不带空格的元素
for i = 1 to L 的长度
 输出带空格的元素
end for

3.代码截图

4.PTA提交列表说明。



未考虑空表时的输出
用了 if 来修正

题目2 单链表逆置

2. 设计思路(伪代码或流程图)

自定义函数void CreateList(List & L, int n)
定义变量 i 用于循环 
定义指针 r用于操作,p = L
for i = 0  to n-1 
  输入数字r->data
  令r -> next 等于 p -> next
  p -> next =r
  p = p -> next
end for
自定义函数ReverseList(List & L)
定义指针 s , p = L -> next
当 p不为空时
  令s指向p,p指向r,r等于p,p等于s 
退出循环后
L 指向 r
自定义函数PrintList(List L)
若 L -> next -> next 为空
输出 NULL
否则
  令 L 指针向后移动
  输出L -> data
  再令 L 后移 
     当 L 指向非空时
    输出  “”L->data
    指针后移
  结束循环 

3.代码截图

4.PTA提交列表说明。

未给r分配空间导致以及没有考虑空链表导致段错误。

题目3 两个有序链表序列的合并

2. 设计思路(伪代码或流程图)

定义链表 L1 L2 L3 
定义工作指针s1 = L1 
        s2 = L2
        s3 = L3 
定义工作指针r 
定义变量n=0
用尾插法建立2个链表
循环比较 s1 -> data 与 s2 -> data
若 s1 -> data > s2 -> data) {
            r -> data = s2 -> data;  
            r -> next = s3 -> next;
            s3 -> next = r;
            s2 = s2 -> next;
        }  将小的存入L3并且令其指针后移 
小于等于时同理 
利用循环输出 

3.代码截图

4.PTA提交列表说明。



忘记分配内存,并列时我把重复的给删除了导致第二点错误

二、截图本周题目集的PTA最后排名(3分)

1.顺序表PTA排名

2.链表PTA排名

3.我的总分:215

三、本周学习总结(2分)

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

安排内容:学习时间安排、编程时间安排、不懂问题是哪种方式交流?

不满意,时间不够,大多数时间都在做pta,做得很慢,下次要提高效率

2.谈谈你对线性表的认识?(1分)

此处先谈你自己主观认识,后面再具体总结本章各个小节内容。
线性表是一种数据,是以栈、队列、字符串、数组等特殊线性表的形式来使用的,能够提高数据运算的效率,线性表是一个线性结构。

3.代码Git提交记录截图

四、阅读代码

void isSymmetric(Node *L){  
    int arr[maxSize];         
    //链表中共有n个元素  
    Node *r;  
    r = L->next;  
    int i = 0;  
    while(i < (linkListSize)/2){//当小于一半的时候   
        arr[i] = r->data;  
        r = r->next;//循环   
        i++;   
    }  
    i--;//回到数组的最高值   
    //若linkListSize是奇数,则需要后移一位(越过中心结点)  
    if(linkListSize%2==1)   r= r->next;   
    while(r!=null)//未到链表尾部时   
    {  
        if(r->data == arr[i])  
        {  
            i--;   
            r = r->next;   
        }   
        else break;//跳出循环   
    }   
    if(i == -1){  
        printf("中心对称\n");  
    }   
    else{  
        printf("非中心对称\n");  
    }   
}  

该代码用于判断链表是否对称,用a []存前半段代码,再与后半段比较,若不同跳出循环输出不对称,否则循环到结束,输出对称,思路清晰,注释明白

posted on 2018-03-25 21:48  FaceTheWind  阅读(142)  评论(1编辑  收藏  举报

导航