日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2.1线性表的类型定义

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2.1线性表的类型定义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

列2-1:假設利用兩個線性表LA和LB分布表示兩個集合A和B(即線性表中的數據元素即為集合中的元素),現要求一個新的集合A=AUB。這就要求對線性表作如下操作,擴大線性表LA,將存在于線性表LB中而不存在于線性表LA中的數據元素插入到線性表LA中去。只要從線性表LB中依次取得每個數據的元素,并依值在線性表LA中進行查訪,若存在,則插入之。上述操作過程可用下列算法描述之

void Union(List &La, List Lb) { // 將所有在線性表Lb中但不在La中的數據元素插入到La中int La_len,Lb_len,i;ElemType e;La_len = ListLength(La); // 求線性表的長度 Lb_len = ListLength(Lb);for (i=1; i<=Lb_len; i++) {GetElem(Lb, i, e); // 取Lb中第i個數據元素賦給eif (!LocateElem(La, e, equal)) // La中不存在和e相同的數據元素ListInsert(La, ++La_len, e); // 插入} } // union
書中給我了偽代碼,我們現在來分析下:

1.第一行我們可以知道這個函數叫聯合,包含來個參數,一個是線性表La,一個是表Lb,且La是一個引用,這表名La是將會被修改的

2.第三行我們可以知道定義了兩個int型變量用于存La和Lb的長度

3.第四行定義了一個ElemType(我猜測這是element和type的組合表示這是一個元素類型,具體是什么類型取決于List容器里面的類型),從下面的代碼可知這個變量是為提取Lb中某個數與La中的數進行比較,

4.第五行,第六行可知他調用了一個叫ListLength的函數這函數要傳入List。返回List的長度

5.第七行是進行一個循環,這個循環是Lb的長度,從for循環第一個參數可以知道,這個List是從下標1開始,而不是從0開始。

6.第八行是GetElem函數,意思是獲取元素,從參數來看,我們知道他獲取的是Lb的第i個元素,第三個參數填寫的是e,這里我們要思考下如果e是普通類型的參數,那么他根本就無法回調給e(此函數無返回值,只有靠第三個參數回調數據),所以這個ElemType肯定是被typedf為*ElemType。還有一種可能,就是GetElem的第三個參數是一個引用。還是不懂的同學看下面的代碼

#include <stdio.h>typedef struct List {int Num = 1; }*list;int main() {list a;List b;b.Num = 10;a = &b;return 0; } 運行結果:

7.第九行是LocateElem函數,這個用e和La中的每一個元素對比,第三個參數是equal,這個equal是提醒大家這里是比較是否相等,La中沒有數和e相等時,if條件成立

8.第十行插入e進La,并且La_Len增加1。




例2-2:已知線性表LA和LB中的元素按值非遞減有序排列,現要求將LA和LB歸并為一個新的線性表LC,且LC中的數據元素仍按值非遞減有序排列。例如,社

LA=(3,5,8,11)

LB=(2,6,8,9,11,15,20)

LC=(2,3,5,6,8,8,9,11,11,15,20)

從上述問題要求可知,LC中的數據元素或是LA中的數據元素,或是LB中的數據元素,則只要先設LC為空表,然后將LA或LB中的元素逐個插入LC中即可。為使LC中元素按值非遞減有序排列,可設兩個指針i和j分別指向LA和LB中某個元素,若設i當前所指的元素為a,j當前所指的元素為b,則當前應插入到LC中的元素為c為

c=a當a<=b時,或者c=b當a>b時

顯然,指針i和j的初始值均為1,在所指元素插入LC之后,在LA或LB中順序后移。代碼如下:

void MergeList(List La, List Lb, List &Lc) { // 已知線性表La和Lb中的元素按值非遞減排列。// 歸并La和Lb得到新的線性表Lc,Lc的元素也按值非遞減排列。int La_len, Lb_len;ElemType ai, bj; int i=1, j=1, k=0;InitList(Lc);La_len = ListLength(La); Lb_len = ListLength(Lb);while ((i <= La_len) && (j <= Lb_len)) { // La和Lb均非空GetElem(La, i, ai);GetElem(Lb, j, bj);if (ai <= bj) {ListInsert(Lc, ++k, ai);++i;} else { ListInsert(Lc, ++k, bj);++j;}}while (i <= La_len) {GetElem(La, i++, ai); ListInsert(Lc, ++k, ai);}while (j <= Lb_len) {GetElem(Lb, j++, bj); ListInsert(Lc, ++k, bj);} } // MergeList 書中給我了偽代碼,我們現在來分析下:

1.函數MergList,意思是混合鏈,我們可以知道有三個參數La,Lb和&Lc,Lc是要被修改的,所以設為引用

2.InitList是初始化了List,從這里我們可看出,InitList里面那個參數一個是引用

3.第一個while當一個List從頭遍歷到尾后就結束(剩下的直接加進去后面那兩個while就是這個功能)

總結

以上是生活随笔為你收集整理的2.1线性表的类型定义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。