博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
博客作业2---线性表
阅读量:7113 次
发布时间:2019-06-28

本文共 5270 字,大约阅读时间需要 17 分钟。

一、PTA实验作业

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

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

定义函数CreateSqList(List &L,int a[],int n){    L=new SqList;申请空间int i;    顺序长度为L->length=n;    for(i=0 to n){        将数组的值分别赋给L->data[i];end for定义函数DispSqList(List L){    int i;    for(i=0 to L->length        if(查找位置在L->length-1处,则){            输出L->data[i];        否则{            输出L->data[i]加上空格;i++;end for;          定义函数DelSameNode(List &L){    int i,j,flag=0,k=0 ;    List X;      为X申请空间       X->length = 0;    for( i = 0 to L->length ; i++ ){       for( j = i+1 to  L->length; j++ ){         if( L->data[i] 和 L->data[j]相等 ){           flag = 1;         }    }    if( flag == 0 ){    X->data[k] = L->data[i];    k++;    }       内循环结束,还原flag值为0,并执行下一次外循环    end for;         X->length=k;    for( i = 0 to X->length ; i++)    将顺序表X的内容给顺序表K}

3. 代码截图

1232112-20180325195935159-420799103.png

1232112-20180325200016604-103278674.png

4.PTA提交列表说明。

1232112-20180325195440732-1500990625.png

  • 如果有部分大于两个重复数据时不能完全删除干净,所以部分正确,要加入一个判断,如果是重复数据就全部删除即可

  • 重复数据始终无法删除干净,所以我新建了一个另外一个顺序表,来存放这些没有重复的数据;最后再将这些数据反馈给顺序表L即可;

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

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

定义函数Find(LinkList L, int m ){    LinkList s;s=L->next;    int lenth=0;    if(要求的倒数位置m他小于等于0){      return -1;    }    while(s){                 lenth++;        利用循环来求出链表的长度        s=s->next;    }    if(lenth==0){        return -1;    }    if(lenth
next; int j=0; while(p!=NULL&&j
next; }//定义循环找出所求位置 return p->data;}

3. 代码截图

1232112-20180325200055901-1475625062.png

  • 没有考虑m的情况,如果m<=0时一样不成立。所以添加一个判断m的if语句即可

  • 开始时直接在算链表长度的循环里判断链表,然后导致了段错误了,所以将其改成在外面判断即可

4.PTA提交列表说明。

1232112-20180325195544035-935975804.png

1.题目3:7-2 一元多项式的乘法与加法运算

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

#include
#include
#include
using namespace std; struct node{ int coef; //系数 int expn; //指数 node* next; }; 定义了一个结构体定义函数 creat_list(int n){ 定义结构体指针*head, *r; 为head申请空间; 指针r指向head; 定义coef , expn; while(n--){ scanf("%d%d",&coef,&expn); node* tmp = new node; tmp->coef = coef; tmp->expn = expn; r->next = tmp; r = tmp; } 通过循环尾插法来给链表赋值 r->next = NULL; return head; } 定义函数add_list(node* a,node* b){ node *r,*fans, *ans; node *ha,*hb; fans = new node; ans = fans; ha = a->next; hb = b->next; while(ha && hb){ node* tmp = new node; if(ha->expn > hb->expn){ tmp->coef = ha->coef; tmp->expn = ha->expn; ans->next = tmp; ans = tmp; ha = ha->next; } else if(ha->expn < hb->expn){ tmp->coef = hb->coef; tmp->expn = hb->expn; ans->next = tmp; ans = tmp; hb = hb->next; } else{ int mulOfcoef = (ha->coef)+(hb->coef); if(mulOfcoef!=0){ tmp->coef = mulOfcoef; tmp->expn = ha->expn; ans->next = tmp; ans = tmp; } ha = ha->next; hb = hb->next; } } while(ha){ node* tmp = new node; tmp->coef = ha->coef; tmp->expn = ha->expn; ans->next = tmp; ans = tmp; ha = ha->next; } while(hb){ node* tmp = new node; tmp->coef = hb->coef; tmp->expn = hb->expn; ans->next = tmp; ans = tmp; hb = hb->next; } ans->next = NULL; //结尾设为 NULL return fans; } node* multi_list(node* a,node* b){ node* ha, *hb; node* ans,*fans; ha = a->next; hb = b->next; fans = creat_list(0); if(ha == NULL || hb == NULL){ return fans; } node* tmp; while(ha != NULL){ tmp = new node; ans = tmp; hb = b->next; while(hb != NULL){ node* ltmp = new node; ltmp->expn = ha->expn + hb->expn; ltmp->coef = ha->coef * hb->coef; hb = hb->next; ans->next= ltmp; ans = ltmp; } ans->next = NULL; fans = add_list(fans,tmp); ha = ha->next; } return fans; } void print_list(node* l){ node *hc; int flag = 0; hc = l->next; if(hc == NULL){ printf("0 0"); } while(hc != NULL){ if(flag) printf(" "); else flag = 1; printf("%d %d",hc->coef,hc->expn); hc = hc->next; } } int main(){ int n; scanf("%d",&n); node *a = creat_list(n); int m; scanf("%d",&m); node* b = creat_list(m); node* c = add_list(a,b); node* d = multi_list(a,b); print_list(d); printf("\n"); print_list(c); printf("\n"); return 0; }

3. 代码截图

1232112-20180325200127348-2011934003.png

4.PTA提交列表说明。

1232112-20180325195636684-602356781.png

  • 本题我用了自己的方法计算多项式,但是同类项相互抵消这一测试点一直,所以借用了网上的代码。上面主要是通过用加法运算来解决乘法的问题,这样就可以把乘法运算转换成加法运算,这样避免了同类项没有完全抵消的现象。

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

1.顺序表PTA排名

1232112-20180325195330252-1655368817.png

2.链表PTA排名

1232112-20180325195308662-1595597016.png

3.我的总分:225

三、本周学习总结

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

  • 做题,然后学习链表,有序表,双链表如何表达。不是很满意,感觉学习的内容有些不懂而且上面多项式的计算还是有错误 的。下次敲代码之前,做好预习工作。把这些题目都给弄懂。

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

  • 线性表个人感觉比之前学的还要难一些,而且有些代码根本不知道哪里错了。线性表包括顺序表和链表。链表包括单链表,双链表还有循环链表,还有有序表。顺序表里面元素的地址是连续的,链表里面节点的地址不是连续的,他们是通过指针连起来的。链表可以保存数据,所以增加删除等操作比较容易。顺序表在查找某一位置的数据时更加方便。

    3.代码Git提交记录截图

    不会,看不懂上面说了什么。

转载于:https://www.cnblogs.com/guanzheng7474741/p/8642521.html

你可能感兴趣的文章
美国国有企业
查看>>
推送的通知和自定义消息区别
查看>>
c# 解析JSON的几种办法
查看>>
autofs自动挂载
查看>>
JavaWeb学习笔记——过滤器
查看>>
互联网创业原则与创业模式attilax大总结
查看>>
微信小程序想通过场景化缩短路径
查看>>
手把手教你DIY一个春运迁徙图(一)
查看>>
mysql编码问题
查看>>
Web APi之HttpClient注意事项以及建议
查看>>
Webkit内核探究【2】——css简介
查看>>
[Angular] Ngrx/effects, Action trigger another action
查看>>
原生和jQuery的ajax用法
查看>>
【Linux】Linux中 “there are stopped jobs”问题的解决方案
查看>>
[NPM] Use custom config settings in your npm scripts
查看>>
[NPM] Create a node script to replace a complex npm script
查看>>
Kinect2.0获取数据
查看>>
Python split()方法
查看>>
arcgis api for js入门开发系列九热力图效果
查看>>
MySql无法远程登录以及IP被锁解决办法
查看>>