1. 程式人生 > >博客作業2---線性表

博客作業2---線性表

搜索 pri 相互 down 情況 鏈表並集 要求 順序表 %d

一、PTA實驗作業(5分)

題目1:7-1 最長連續遞增子序列

1. 設計思路

創造順序表並記錄他的長度為maxsize
innt max[maxsize]//保留最大數的所有數
用一個數組保留最大
for(int i=0;i<L->length-1;i++){
遍歷數組裏面的元素當後面一個結構體的數據小於前面的更新最大數組的大小和長度
比較長度,當長越過原來的數組時就直接替換。
}
完成輸出銷毀

2.代碼截圖

技術分享圖片

3.PTA提交列表說明。

技術分享圖片
當n為1是沒有輸出最大數列後更改。

題目2:6-4 集合的基本運算

1.設計思路

//鏈表元素遞增函數(重構鏈表)
保留鏈表的表頭和第一個節點。
while(r){
//r為原先鏈表的第二個節點
遍歷新鏈表當數據小於某一個數的後一個節點的數據的時候完成連接,
r=r->next
}
//r為s1鏈表的工作指針
//p為s2鏈表的工作指針

//鏈表並集(二路歸並)
while(p&&r)
if(p->data>r->data)
申請空間保留r裏面的數據
連接到鏈表中
r向後移動
else if(p->data<r->data)
申請空間保留p裏面的數據
連接到鏈表中
p向後移動
else
申請空間保留r裏面的數據
連接到鏈表中
r,p都移動
}
完成輸出摧毀並集鏈
while(p){
將p中剩下的節點都用開辟新空間連接節點的方式放到鏈表去
}
while(r){
將r中剩下的節點都用開辟新空間連接節點的方式放到鏈表去
}

//鏈表交集(二路歸並)
while(p&&r)
if(p->data>r->data)
r向後移動
else if(p->data<r->data)
p向後移動
else
申請新空間將節點數據保留節點的數據並且連接到鏈表中去
r,p都移動
}
完成輸出摧毀並集鏈


//鏈表差集(二路歸並)
while(p&&r)
if(p->data>r->data)
r向後移動
else if(p->data<r->data)
申請空間保留p裏面的數據
連接到鏈表中
p向後移動
else
r,p都移動
}
完成輸出摧毀並集鏈
while(p){
將p中剩下的節點都用開辟新空間連接節點的方式放到鏈表去
}

3.代碼截圖

技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

4.本題調試過程碰到問題及PTA提交列表情況說明。

技術分享圖片
在復制,黏貼重復步驟時沒有把指針名字更改造成錯誤

題目3:7-4(選做) 一元多項式求導

2.設計思路

//截取了核心部分求導的函數設計思路
for(遍歷整條鏈表)
if(節點內指數數據為0)時刪除這個節點;
else 將鏈表的節點的zhishu-1 系數變為指數乘以系數

3.代碼截圖

技術分享圖片

4.本題調試過程碰到問題及PTA提交列表情況說明。

技術分享圖片
答案是 0 0 的時候沒操作好後來修改了

二、截圖本周題目集的PTA提交列表及最後排名。

PTA排名

1.順序表PTA排名

技術分享圖片

2.鏈表PTA排名

技術分享圖片

3.我的總分:295

三、本周學習總結

1.談談你本周數據結構學習時間是如何安排,對自己安排滿意麽,若不滿意,打算做什麽改變?(1分)

有時間就打打代碼很少看書,覺得應該增加一些書本代碼的閱讀來改進自己的代碼風格。

2.談談你對線性表的認識?

線性表、包括順序表和鏈表
順序表裏面元素的地址是連續的,
鏈表裏面節點的地址不是連續的,是通過指針連起來的。
鏈表有利於保存數據(它的增加刪除等操作會比較容易)
而順序表比較適合作為查找數據的目錄就像圖書館裏面的搜索器。
二者可以相互結合來操作用會比較好一點單一使用二者之一的應用範圍我認為比較局限。

3.代碼Git提交記錄截圖。

技術分享圖片

四、閱讀代碼

題目描述:
在一個周長為10000的圓上等距分布著n個雕塑。現在又有m個新雕塑加入(位置可以隨意放),希望所有n+m個雕塑在圓周上均勻分布。這就需要移動其中一些原有的雕塑。要求n個雕塑移動的總距離盡量小。

#include<cstdio>  
#include<cmath>  
  
int main()  
{  
    int n, m;  
    while(scanf("%d%d", &n, &m) == 2)  
    {  
        double ans = 0.0, pos = 0.0;  
        for(int i = 1; i < n; i++)  
        {  
            pos = (double)i / n * (n+m);            //計算每個需要移動的雕塑的坐標(成比例縮小,目的是通過與floor作差得到移動距離~)  
            ans += fabs(pos-floor(pos+0.5)) / (n+m);//累加移動距離  
        }  
        printf("%.4lf\n", ans*10000);               //等比例擴大坐標  
    }  
    return 0;  
}  

分析題目可以知道總是有一個雕塑位置是不動的然後以這個雕塑為定點縮小題目周長的思想把題目簡化,最後再放大回來,值得學習的思想。

博客作業2---線性表