資料結構 線性表操作

2022-06-08 14:57:08 字數 4135 閱讀 2377

1.有兩張非遞增有序的線性表a,

b,採用順序儲存結構,兩張表合併用

c表存,要求

c為非遞減有序的,然後刪除c表中值相同的多餘元素。

#includeusing

namespace

std;

#define maxsize 100

#define overflow -1

#define error 0

#define ok 1typedef

intstatus;

typedef

intelemtype;

//順序儲存

typedef struct

sqlist;

sqlist la,lb,lc;

sqlist initlist()

sqlist listinsert(sqlist &l,int

i,elemtype e)

sqlist listsort(sqlist &l)

return

l; }

sqlist listdelete(sqlist &l)

l.length--; //

每刪除乙個元素長度減一

j--;}}

}}

returnl;}

void printlist(sqlist &l)

}sqlist addlist(sqlist *la, sqlist *lb, sqlist *lc)

else

}while(i < la->length)

while(j < lb->length)

lc->length =k;

return *lc;

}int

main()

cout

<<"

請輸入鍊錶b的長度:";

cin>>num1;//

輸入lb的長度

cout

cout

<<"

鍊錶a:

"

cout

<<"

鍊錶b:

"

cout

cout

<<"

合併後的c鍊錶:

"

cout

cout

<<"

刪除相同多餘元素後的c鍊錶:

"

cout

cout

<<"

排完序後的c鍊錶:

"

return0;

}

2.有兩張非遞減有序的線性表a,

b,採用鏈式儲存結構,兩張表合併用

c表示,要求

c為非遞增有序的,然後刪除c表中值相同的多餘元素。

#includeusing

namespace

std;

typedef

intelemtype;

//鏈式儲存

typedef struct

lnode

lnode,*linklist;

linklist initlist(linklist &l)

linklist listinsert(linklist &l,elemtype e)

linklist s;

s=new

lnode;

s->data=e;

s->next=p->next;

p->next=s;

returnl;}

void createlist(linklist &l,intn)}

linklist addlist(linklist &la,linklist &lb,linklist &lc,int

n)

else

if(pa->datadata)

else

if(pa->data=pb->data)

}else

if(pa&&!pb)

else

if(pb&&!pa)

}return

lc;}

void printlist(linklist &l)

cout

<}void sortlist(linklist &l)

for(w=k-1;w>=0;w--)

}int

main()

3. 約瑟夫問題:編號為1,

2,..n的

n個人按順時針方向圍坐一圈,每人持有乙個密碼(正整數)。一開始任選乙個正整數作為報數上限值

m,從第乙個人開始按順時針方向自

1開始順序報數,報到

m時停止報數。報

m的人出列,將他的密碼作為新的

m值,從他在順時針方向上的下乙個人開始重新從

1報數,如此下去,直至所有人全部出列為止。試設計乙個程式求出出列順序。

psw,功能初始化迴圈鍊錶,插入資料,刪除結點(重點)。主函式呼叫。

#includeusing

namespace

std;

typedef

struct

node

circlenode,*circlelist;

circlelist initlist(circlelist &l)

circlelist listinsert(circlelist &l,int

n) q->next=l;

returnl;}

void printlist(circlelist l,intn)}

void knockout(circlelist l,int n,int

m)

else

++i;

}cout

<<"

出列的人是第

"個人,密碼是

"m=cur->password;

prev->next=cur->next;

free

(cur);

//free函式的作用是釋放當前指標指向的記憶體塊單元的空間.free完之後指標仍然指向原來的堆位址,即仍然可以繼續使用,

// free只是釋放了malloc等所申請的記憶體,並不改變指標的值,指向的下乙個節點沒變

//也就是說malloc申請的記憶體單元,經過free(cur)以後

//這片記憶體單元就空閒了出來給其他地方使用了.

//但是要注意:經過free以後,cur還是指向有實際的位址的,但是這個指標

//所指向的位置是空閒的,所以這個cur指標也沒有作用了,被稱為"懸空指標".

//類似c++裡面的delete指令.

}

}int

main()

free()函式的理解:

核心通過乙個紅黑樹來記錄了空閒的記憶體,malloc就是從樹中查詢一塊大小適合的記憶體並把位址給你,然後把這個節點從樹中摘除,避免被別人分配到產生衝突。這個記憶體現在歸你乙個人用了。

free函式是把你的這個記憶體重新放回到紅黑樹中,讓別人可以申請到這個記憶體。從邏輯上來說,你現在不能在使用這個記憶體了,因為它已經不屬於你。但是系統的實現上目前沒有做到,所以你還是能訪問這個位址。

另外,系統也不會幫你覆蓋記憶體中的資料,因為做這乙個操作浪費時間,沒有必要。

打乙個簡單的比方。你租了一套房子,後來租期到了,房子回到房東手裡,或者又轉租給別人。但是你拿著原來的鑰匙還是能進入那套房子,雖然這個是不合法的。

感謝論壇分享:

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...

資料結構 線性表

線性表是最基礎的一種資料結構,這樣的資料物件包含的資料元素具有一對一的前驅後繼關係。按其邏輯儲存方式的不同可分為兩類線性表 順序表和鏈式表。其中鏈式表又可分為線性鍊錶 迴圈鍊錶和雙向鍊錶。下面分別介紹下這幾種線性表的資料結構 1.順序表 typedef struct sqlist 插入演算法 i到n...