1.有兩張非遞增有序的線性表a,
b,採用順序儲存結構,兩張表合併用
c表存,要求
c為非遞減有序的,然後刪除c表中值相同的多餘元素。
#includeusingnamespace
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表中值相同的多餘元素。
#includeusingnamespace
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//free函式的作用是釋放當前指標指向的記憶體塊單元的空間.free完之後指標仍然指向原來的堆位址,即仍然可以繼續使用,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只是釋放了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...