本週我們學習了順序表和煉表的知識,自我感覺對它們已經有了初步的認識,但是可能因為鍊錶相對於順序表的操作可能會更加的複雜與抽象,對於一些相對複雜的操作可能還不是特別的熟悉,比如說逆置與插入,每次做題前都要想很久該怎麼做,這其實就是對鍊錶的基礎掌握太不紮實。通過這一周資料結構的學習,我能很明顯感覺到資料結構相較於c,會更加的理論化和抽象化,需要我們能更加深層的理解**,要我們清楚的知道要怎麼進行步驟。如果你只敲完**,卻不去真正理解,去想明白他的結構與變換方法,就會像我一樣,敲完一題**,過了幾天,又把它的原理忘得一乾二淨。吸取了上次的教訓,在今後的資料結構的學習中,我要更加頻繁的去讀**,去理解**,而不是一打完就晾在一旁,勤能補拙!
思路:先將兩個鍊錶的資料依次存入乙個陣列中,在對這個陣列進行排序和刪除重複元素的操作,再將這個陣列通過尾插法插入乙個新煉表中,再將新鍊錶的值賦給要返回的鍊錶。
偽**:
排序函式
定義整形陣列 a
定義三個整型變數i=0,k,j
linklist p;
p=p->next;
while(p不為空)
資料存入陣列
p移向下乙個節點
i++end while
linklist c;
c=l2->next
while(c不為空)
資料存入陣列
c移向下乙個節點;
i++;
end while
for j=0 to i
for k=0 to j
冒泡法排序
end for
end for
定義整型變數 q,w=0;
刪除陣列裡的重複元素
linklist s r l;
定義乙個整型變數 m
用尾插法將陣列資料寫入乙個鍊錶
思路:通過遍歷鍊錶找到插入位置進行插入,這樣插入的得到的鍊錶是有序的,在遍歷鍊錶得到相同的元素,繼續刪除,輸出鍊錶
偽**:
插入函式
linklist p,r,q
q = new lnode;
p = l->next;
r = l;
q->data = e;
q->next = null;
while (p)
if (p->data >= e)//尋找插入位置
記錄位置並插入
end if
後移end while
q->next = p;
r->next = q;
刪除函式
if (l->next == null) return;
linklist p, r, c;
p = r = l;
c = l->next;
while (r->next)
if (c->data == e)//尋找刪除元素
刪除資料
return;
end if
記錄位置並後移
思路:將兩個有序表裡的資料按順序輸入乙個陣列中,在輸出這個陣列中相應位置的元素
偽**:
#include #define maxsize 100000
using namespace std;
typedef int elemtype;
typedef struct
list;
typedef list *sqlist;
void createlist(sqlist &l,int n);//建順序表
void linenode(sqlist &l1,sqlist &l2,int n);//排序
int main()
void createlist(sqlist &l,int n)
void linenode(sqlist &l1,sqlist &l2,int n)
{ 定義兩個整型變數i,j和num,t都等於0
sqlist l;
定義乙個整形陣列
判斷大小分別以小的資料寫入陣列,i與j要小於兩條鏈的長度
長度翻倍
從順序表中刪除具有最小值的元素(假設唯一)並由函式返回被刪除元素的值。空出的位置由最後乙個元素填補,若順序表為空則顯示出錯資訊並退出執行。
搜尋整個線性表,查詢最小值元素的位置,並記錄該位置,然後用最後乙個元素的值將其覆蓋,並返回最小值。
為什麼不傳遞值,而傳遞位址?
函式內部的都是區域性變數,對這些變數的操作只在函式內部有效。細節一點兒,區域性變數存放在計算機的暫存器中,不寫入主存,也就不改變記憶體中的c**(資料)。
這裡如果函式呼叫傳遞的是順序表l,l就相當於區域性變數,相當於複製了l,並不會修改最初的l。而如果引用l的位址,可以直接操作記憶體,修改的就是l,修改後的內容也會被寫入l對應的儲存空間。
部落格作業02 線性表
給定乙個順序儲存的線性表,請設計乙個演算法查詢該線性表中最長的連續遞增子串行。例如,1,9,2,5,7,3,4,6,8,0 中最長的遞增子串行為 3,4,6,8 查詢最長連續遞增子串行函式 定義整型變數i,j表示迴圈變數,k用來作找到後新陣列下標 定義整型變數 maxlength 1 maxleng...
DS部落格作業02 線性表
方法,還有迴圈鍊錶和雙鏈表的建立,學習了這幾種鍊錶,在今後的使用鍊錶中有了更多的選擇,同時也提高了解部分題目的效率。在順序表這一方面,主要學習的是對順序表的插入和刪除操作,鍊錶也同樣是插入和刪除,再加上擴充套件的一些操作。這兩種線性表各有 其優缺點,在使用時還需要分情況考慮。插入函式listinse...
DS部落格作業02 線性表
這階段學習學的是線性表,學習線性表的兩種儲存順序 鍊錶和順序表,體會了兩者儲存結構之間的區別,通過對順序表,單鏈表,雙鏈表,迴圈鍊錶,有序表的特點的了解,和學習它們的演算法設計方法,綜合運用線性表解決一些問題,在查資料時,也領悟一點單雙鏈表的在一些方面使用的優劣,對線性表的知識更加加深一點。void...