本題要求將任一給定元素插入從大到小排好序的陣列中合適的位置,以保持結果依然有序。寫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是使用...