1 9 有序陣列的插入 20分

2021-10-08 17:02:37 字數 2085 閱讀 5366

本題要求將任一給定元素插入從大到小排好序的陣列中合適的位置,以保持結果依然有序。寫bool insert函式。

l是使用者傳入的乙個線性表,其中elementtype元素可以通過》、==、《進行比較,並且題目保證傳入的資料是遞減有序的。函式insert要將x插入data中合適的位置,以保持結果依然有序(注意:元素從下標0開始儲存)。但如果x已經在data中了,就不要插入,返回失敗的標記false;如果插入成功,則返回true。另外,因為data中最多只能存maxsize個元素,所以如果插入新元素之前已經滿了,也不要插入,而是返回失敗的標記false。

裁判測試程式樣例:

#include

#include

#define maxsize 10

typedef

enum

bool;

typedef

int elementtype;

typedef

int position;

typedef

struct lnode *list;

struct lnode

;list readinput()

;/* 裁判實現,細節不表。元素從下標0開始儲存 */

void

printlist

( list l )

;/* 裁判實現,細節不表 */

bool insert

( list l, elementtype x )

;int

main()

/* 你的**將被嵌在這裡 */

輸入樣例1:

5

351287

310

輸出樣例1:

35

121087

3 last =

5

輸入樣例2:

6

3512108

738

輸出樣例2:

insertion failed.

3512108

73last =

5

bool insert

(list l, elementtype x)}if

(l->data[l->last]

> x)

flag = l->last +1;

if(flag !=-1

) l->data[flag]

= x;

l->last +=1

;return true;

}return false;

}

就是一開始寫的方法。

注意點:① 有乙個測試點叫「重定義bool型別」,不太清楚對這個true,false的影響,但是加上了

l->last += 1;

這句之後這個點就對了。

②sample2同型別,也就是相同值的時候,別忘了。一開始就忘了,以為可以break,其實不行,不加那個if還會繼續迴圈下去。

③測試點「大資料,起始點」和「大資料,末尾點」總是不對。後來發現是很憨批的把

l->last += 1;

放在了flag!=-1的第一句而不是最後!實在是太傻了

bool insert

( list l, elementtype x )

l->data[i]

=x; l->last=l->last+1;

break;}

else

if(i==l->last&&l->data[i]

>x)

}return true;

}

其他部落格上看到的,跟法1邏輯完全一樣,但是他整合在了乙個for裡面討論三種情況,感覺比前面1更清晰一點。

習題1 9 有序陣列的插入 (20 分)

bool insert list l,elementtype x l data i x l last l last 1 不要忘記長度加一 break else if i l last l data i x return true 本題要求將任一給定元素插入從大到小排好序的陣列中合適的位置,以保持結果...

習題1 9 有序陣列的插入 20 分

習題1.9 有序陣列的插入 20 分 本題要求將任一給定元素插入從大到小排好序的陣列中合適的位置,以保持結果依然有序。函式介面定義 bool insert list l,elementtype x 其中list結構定義如下 typedef int position typedef struct ln...

習題1 9 有序陣列的插入 20 分

本題要求將任一給定元素插入從大到小排好序的陣列中合適的位置,以保持結果依然有序。bool insert list l,elementtype x 其中list結構定義如下 typedef int position typedef struct lnode list struct lnode l是使用...