1. 採用遞增有序的順序表表示集合,求解兩個集合的交集
(1)定義順序表的儲存結構;
(2)實現儲存遞增有序集合的順序表的建立、求交集運算;
2. 採用遞增有序的鍊錶表示集合,求解兩個集合的交集
(1)定義鍊錶的儲存結構;
(2)實現儲存遞增有序集合的鍊錶的建立、求交集運算;
3. 比較順序表和煉表的優缺點和適用場合
1.順序表
#include#includeusing namespace std;
#define initsize 20//表長度的初始定義
typedef int elemtype;
typedef struct sqlist;//動態分配陣列順序表的型別定義
//初始化順序表
sqlist initlist(sqlist& l)
l.length = 0;
l.maxsize = initsize;
return l;
}//建立順序表
sqlist createlist(sqlist& l)
return l;
}//顯示順序表
void displaylist(sqlist l)
printf("\n\n");
}//求交集
void intersection(sqlist &l1, sqlist &l2,sqlist &l3)
else lnode,*linklist;
//初始化單鏈表
linklist initlist()
l->next = null;
return l;
}//用尾插法建立單鏈表
linklist list_tailinsert(linklist& l)
r->next = null;//尾結點指標置空
return l;
}//列印單鏈表
void printlist(linklist l)
printf("\n");
}//單鏈表求交集
void intersection(linklist a, linklist b, linklist &c)
} r->next = null;//置c尾結點指標為空
}//主函式
int main()
1.順序表
2.單鏈表
1.線性表的順序儲存型別描述中有elemtype的元素型別,但是在vc中需要typedef int elemtype,才能使用,否則會出現未定義識別符號elemtype
2.出現c6031 返回值被忽略: "scanf"的原因是因為在ansi c中沒有scanf_s(),只有scanf(),但是scanf()在讀取時不檢查邊界,所以可能會造成記憶體洩露。於是microsoft公司在vs中提供了scanf_s(),所以只需要把把scanf換為scanf_s就可以解決問題了
3.出現引發了未經處理的異常:寫入訪問許可權衝突的問題是因為沒有初始化順序表,所以只需要initlist(l);就可以解決這個問題了
4.linklist和lnode*不同名字的同乙個指標型別,linklist型別的指標變數head表示他是單鏈表的頭指標,lnode *型別的指標變數p表示它是指向某一結點的指標
5.求單鏈表的交集時列印的結果一直出不來,困擾了好久,後來上網查詢,比對了別人的**,發現自己缺少了乙個&,導致對鍊錶修改的失敗,列印不出來結果
資料結構之順序表和煉表
1.線性表 線性表 linear list 是n個具有相同特性的資料元素的有限序列。線性表是一種在實際中廣泛使用的資料結構,常見的線性表 順序表 鍊錶 棧 佇列 字串 線性表在邏輯上是線性結構,也就說是連續的一條直線。但是在物理結構上並不一定是連續的,線性表在物 理上儲存時,通常以陣列和鏈式結構的形...
(資料結構) 順序表和煉表的比較
1.儲存方式的比較 順序表的儲存空間是一次性分配好的了,而鍊錶的儲存空間是多次分配的。2.儲存密度 節點值域所佔儲存量 節點結構所佔的儲存總量 順序表的密度是等於1的,而鍊錶的密度是小於1的 1.訪問方式 順序表可以隨機抽取,也可以順序抽取 但是鍊錶只可以順序抽取 讀取第n個元素,那麼就必須遍歷其之...
C語言 資料結構 順序表和煉表
一 線性表 線性表 linear list 是n個具有相同特性的資料元素的有限序列。線性表是一種在實際中廣泛使用的資料結構,常見的線性表 順序表 鍊錶 棧 佇列 字串 線性表在邏輯上是線性結構,也就說是連續的一條直線。但是在物理結構上並不一定是連續的,線性表在物理上儲存時,通常以陣列和鏈式結構的形式...