基於順序表的非遞減有序表的合併

2021-10-24 18:38:25 字數 3100 閱讀 1132

程式設計實現順序表下教材第二章定義的線性表的基本操作,並根據已經實現的基本操作,實現兩個非遞減有序的線性表的合併,注意,合併時,如果有重複的元素,請保留乙個。

(a)求前驅是指,輸入乙個元素值(而不是位置),求該元素在順序表中的直接前驅元素值。求後繼是指:輸入乙個元素值(而不是位置),求該元素在順序表中的直接後繼元素值;(b)為了方便修改資料元素的型別,請使用型別重定義,可以方便修改線性表中的資料元素的型別;(c)大部分函式的返回結果應是函式執行是否成功的一種狀態,執行成功了,才返回具體的結果值;(d)對每個功能進行測試時,要求把不合法的情況也測試一下。具體見下面的測試用例;(e)採用選單形式對應各個操作,使其編成乙個完整的小軟體,參考介面如下。

驗收/測試用例

通過選單呼叫各個操作,測試點:

1、沒有初始化前進行其他操作,程式是否能控制住;即,如果沒有初始化線性表,其他的功能是無法正常進行的,如果選擇進行其他操作,要提示先進行初始化;

2、初始化乙個順序表(初始化順序表,是指初始化乙個空的線性表,裡面的元素個數是0);

3、插入資料(位置, 資料),要測插入位置不合法的情況(0,1)、(2,1),正確插入3個資料(1,20)、(1,10)、(3,30);

4、顯示順序表中的資料,螢幕輸出10, 20, 30;

5、判空,螢幕輸出順序表非空;

6、輸出順序表長度,螢幕輸出3;

7、獲取指定位置元素,要測指定位置在【1,3】範圍之外的情況和之內的情況;

8、定位,輸入:40, 輸出:不存在,輸入20,輸出位置為2;

9、求直接前驅,要測求第乙個元素的前驅、不存在順序表中的元素的直接前驅,其他元素的直接前驅;輸入10,輸出:第乙個元素沒有前驅,輸入20,輸出前驅是10,輸入40,輸出該元素不存在;

10、求直接後繼,要測最後乙個元素的後繼、不存在順序表中的元素的直接後繼,其他元素的直接後繼;同上求前驅;

11、刪除,要測位置在【1,3】範圍之外的情況和之內的情況;

12、清空操作後再測長度,判斷是否為空;

13、銷毀順序表,銷毀線性表之後還能不能做插入,刪除等操作,如果選其他操作,就要提示線性表已經銷毀不存在;

14、測試合併操作,第乙個線性表中的元素是(2,3,4,5),第二個線性表中的內容是(1,4,5,6,7),合併後的結果,請輸出。

#include

#include

#include

#define length 1000

#define addlength 500

#define true 1

#define false 0

#define ok 1

#define error 0

#define overflow -2

typedef

int status;

typedef

int elemtype;

using namespace std;

//完成表的建立,插入,刪除,排序,銷毀,查詢

int n,i,e,d;

typedef

struct

sqlist;

void

bin(sqlist &l,sqlist &m)}if

(count ==0)

}}//case 13:

void

initlist

(sqlist &l)

void

clearlist_sq

(sqlist &l)

//清空線性表

status listempty_sq

(sqlist l)

if(l.length ==0)

else

}//csae 4:

intlistlength_sq

(sqlist l)

void

sortlist

(sqlist &l)}}

}void

addlist

(sqlist &l,

int i,

int&e)

if(l.length+

1>l.listsize)

for(j=l.length;j>=i;j--

) l.elem[j]

=l.elem[j-1]

; l.elem[i-1]

=e; l.length++

;printf

("插入成功.\n");

}void

deletelist

(sqlist &l,

int i,

int&e)

void

destorylist

(sqlist &l,sqlist &m)

else

}//case 2:

intsearchlist

(sqlist l,

int e)

void

displaylist

(sqlist l,sqlist m)

void

locate

(sqlist l)

}//定位元素

void

priorelem

(sqlist &l,

int i,elemtype &e)}}

//求前驅

void

nextelem

(sqlist &l,

int i,elemtype &e)}}

//求後繼

void

menu()

intmain()

printf

("\n");

free

(m.elem)

; m.elem=

null

; m.length=0;

m.listsize=0;

break

;case14:

cin >> d;

if(d <0)

return0;

default

:printf

("你輸入的指令是錯誤的!");

break;}

menu()

; cin >> n;

}return0;

}

非遞減有序鍊錶的合併

任務管理器關閉後台執行的程式以免出現錯誤 問題描述 利用鍊錶儲存結構實現非遞減有序表的合併 分析 鍊錶不需要額外開闢儲存空間,可以直接利用原鍊錶空間 建立兩表元素之間新的鏈結即可 include include 流 include include 包含exit標頭檔案 include include...

順序表的有序合併

題目描述 有兩個順序表la和lb,其元素均為非遞減有序排列,編寫演算法,將它們合併成乙個順序表lc,要求lc也是非遞減有序排列。例如,la 2,2,3 lb 1,3,3,4 則lc 1,2,2,3,3,3,4 輸入描述 分別輸入兩個順序表la和lb,以 1結束輸入 輸出描述 輸出歸併後的順序表lc ...

合併兩個非遞減有序的單迴圈鍊錶

合併兩個非遞減有序的單迴圈鍊錶 本題要求實現乙個合併函式,實現對有序單迴圈鍊錶tail1和tail2的合併,要求合併時實現去重操作,即合併後的鍊錶中沒有重複的元素,並且合併後的鍊錶為遞增有序鍊錶。函式介面定義 pnode mergendeduplicatelist pnode tail1,pnode...