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