1樓:杜軻
以下是我寫的關於連結串列的一個類模版,實現了插入結點,刪除結點,將連結串列倒轉等功能,直接包含在主函式的檔案裡就可以用了;
//link.h
# ifndef link_h
# define link_h
# include
template
class link;
template
class node
;template
node::node()
template
void node::set()
template
void node::show()
;# endif
template
link::~link()//從頭刪除;
}template
link::link()
template
link::link(int n)
template
void link::set() }
cout<<"there is/are "<*current = head;
for(int i=0;i>current->el;
current = current->pnext;}}
template
void link::show()
cout<
int link::addtohead()
template
int link::addtotail()
template
int link::addmiddle(int x)
p->pnext = current->pnext;
current->pnext = p;
result = 1;
length++;
return result;
}template
int link::delhead()
template
int link::deltail()
delete tail;
tail = current;
result = 1;
length--;
return result;
}template
int link::delmiddle(int x)
node*tmp = current->pnext;
current->pnext = current->pnext->pnext;
delete tmp;
result = 1;
length--;
return result;
template
linklink::operator =(linkx)
y.current = y.current->pnext;
x.current = x.current->pnext;
}return y;
}template
void link::updown ()//將連結串列倒置;
current = head;
for(i=0;iel = arr[length-1-i];
if(i==length-1)
tail = current;
current = current -> pnext;
}delete arr;
}template
void connect(link& link1,link& link2)
link1.tail = link1.current;
link2.head = link2.tail = new node;
for(int i=1;i*tmp = new node;
link2.tail->pnext = tmp;
link2.tail = tmp;}}
//*/
2樓:匿名使用者
演算法不用寫**吧,而且看著頭暈。
資料元素逆置,如果只逆置元素值值,申請一個元素空間不停地交換就可以了。如果元素指標順序要交換,就把頭指標指向原來的尾結點,然後逆向變指標就可以了;再不就直接根據原表建立一個雙向連結串列,再消去原來的指標序列就可以了。
3樓:
class node ;
//函式原型為:
template
bool singlelist::reverse( );
template
bool singlelist::reverse()return true;}
4樓:匿名使用者
演算法就這麼簡單
// 認為頭節點存在,如果list類內函式不用判斷頭結點是否為空. 不是類內部函式得判斷頭結點
void reserve(list_node* phead)}
5樓:我是
使用雙向連結串列承接,複製以後在把得到的雙向連結串列的前驅節點和後繼節點全部交換即可
6樓:匿名使用者
畫個圖,考慮一下邊界,結果就出來了/
樓上的有bug
7樓:匿名使用者
找人寫作業 鑑定完畢
一個關於單連結串列的問題
8樓:zll小周
拜託你函式裡面有傳遞引數好吧,你head1,head2沒有傳入函式,怎麼對其進行訪問,要不你就定義全域性變數
一個關於連結串列中地址的問題
9樓:
兩者是有本質區別的。
p++的本質是:p指標向後移動一個單位長度的記憶體空間,這個單位就是p指向的結構型別的大小。所以,如果p當前指向的結構體後面不是next指向的地址,那麼p++就不能等同於p=p->next。
如果存放結構的空間是連續的陣列,譬如struct student st[100]; struct student *p = st;
那麼可以通過p++的方式遍歷陣列中的元素。當然你也看到這種情況下,student結構裡的next指標是沒必要的。
如果存放結構的空間是不連續的記憶體塊,這些記憶體塊通過next指標連成連結串列,那這個時候只能用p = p->next來遍歷連結串列元素了。
關於連結串列的問題,高手解答一下。
10樓:
樓主你好!
第一個問題,&p1->num,就相當於&(p1->num),不知道這樣你能不能看懂?將p1->num替換成任意變數a就成了&a這種普通形式,p1只是說明了num是哪個結構體變數(struct student的變數)的成員(也叫「域」)。
至於第二個問題,指標只是指向一個已經存在變數的變數(指標也是變數),連結串列中的結點是動態分配出來的,但是它也是實際存在的,不是說你指標改變,資料就不存在了。希望這麼說你能夠理解,真要問第二個學生的資料在哪,可以通過遍歷,訪問第一個學生資料結點中的下一結點指標域(struct student *next;)知道,此時,指標所指位置即第二個學生的資料在記憶體中存放的位置。
希望我的回答能對你有所幫助!
如果滿意記得采納為最佳答案哦!~
如果還有問題,可以baiduhi我,o(∩_∩)o~!
一個關於love and peace的問題 5
11樓:冰天的咖啡
。。。汗,我只記得這是銀魂裡的哈達王子的口頭禪
12樓:來自七裡海耿直的無尾熊
下面這個圖是反戰符號。
13樓:匿名使用者
嬉皮士的標誌,嬉皮士的口號,崇尚愛與和平
c語言 求助一個關於連結串列刪除的問題
14樓:
這個出錯點在行 while() 迴圈之後的那一句:
free(l->tail);
第一段程式,其實在 while() 迴圈裡面已經把全部節點都釋放了,包括尾節點,所以第一段程式不需要再釋放一次 l->tail,只需要保留 l->tail = null; 即可。
第二段程式,因為最後一個節點的 next 是 null,while() 迴圈到最後一個節點時就已經跳出,,所以迴圈裡面沒有釋放最後一個節點,因而後面加了 free(l->tail); 這一句是對的。
15樓:匿名使用者
第一段**我覺得沒有問題, 第二段**有問題, 分析下如下:
假設只有head 節點, 那麼在 head->next 就為null。
也就是p指向head, p_next =head->next即指向null。 這樣第二段**中就不會進入迴圈,head節點就無法釋放了。
還請題主進一步測試下。
16樓:三天打魚
上面的p在迴圈裡下面賦值是錯誤的 在下面賦值後p 和p_next指標指向同一個元素
這樣下次迴圈就會漏刪上一個元素 而且 釋放p 等於釋放了p_next 就出問題了
17樓:匿名使用者
兩段**都有問題。問題都在while迴圈後的free(l)的語句。l結點對應地址已經在迴圈內通過free(p)釋放了。
此時l指標的指向是不確定的。再執行free(l)是不合適的。
有關連結串列的表示問題
18樓:郗馳
vertexnode是結構體, vertexnode主要用來後面建立連結串列的操作,連結串列分配的是一段不連續的地址,通過結構體中firstedge記錄下一個結點的位置,使用較靈活,節約記憶體,實現遍歷、查詢、插入、修改、刪除的操作,都需要記錄下連結串列的頭結點位置,比如說需要建立一個vertexnode *pheadnode;//頭結點,adjlist[maxvex]是結構體陣列,定義之後它是被分配在一段連續的地址上面,可通過陣列快速的遍歷、查詢、修改,但是無法插入和刪除,陣列的元素是固定的,沒有連結串列那麼靈活、比較浪費記憶體特別是陣列很大的情況下,代價也很大,但是比連結串列高校。
希望對你有幫助,還望採納!
19樓:風烈
其實你可以分為clear(清空內容,即不刪除頭結點,方便後續接著使用),以及destroy(當知道該連結串列不會再被使用時,包括頭結點全部銷燬)方法。
關於單連結串列的問題
20樓:匿名使用者
我也是剛看過這部分的,但是不知道你用的是什麼書。你告訴我下你用的是什麼教材多少頁,我幫你看看,我看過我的教材了
( 資料結構教材第三版,清華大學出版社,銀藍相間的一本書),但是教材講的東西太麻煩,還有我用的教材可能跟你用的不一樣,沒看見**有寫鉤鏈這個詞啊。
但是我猜啊,他所謂的「先右後左」說的是必須要先s->next=p->next; 再p->next=s; 就是說插入節點要插在中間,應該是這個意思吧,反正不可以顛倒順序,我的教材也在這裡做了強調,不知道是不是這個意思啊。
急求關於二叉連結串列問題的演算法題,急求一個關於二叉連結串列問題的演算法題
1 求結點數的遞迴定義為 若為空樹,結點數為0 若只有根結點,則結點數為1 否則,結點數為根結點的左子樹結點數 右子樹結點數 1 2 求葉子數的遞迴定義為 若為空樹,葉子數為0 若只有根結點,則葉子數為1 否則,葉子數為根結點的左子樹葉子數 右子樹葉子數typedef char datatype 定...
關於java實現連結串列的問題,求高手解惑啊
左手編碼 while p null 解釋下你為什麼錯了 q p q.next rev.header rev.header q p p.next 第一步 q p 這兩個同時指向一個node。第二步 q.next rev.header 將當前node的next指向新連結串列的頭。但是,此時p的next也...
問關於地鐵的問題,問一個關於地鐵的問題
其實每條線都有自己的車輛段和停車庫等,車輛段可以進行所有的維修,檢測等專案,停車庫一般只能停放列車,不同線路之間是可以通過道岔互通的,但是一般不用那些道岔,只有在某條線車不夠用臨時調車才會用到,你說的通向不知名地方的隧道,也可能是備用道,比如列車出故障了,臨時放在那裡,也可能是人防需要,通向某個地下...