單環鍊錶記憶體棧式

2021-08-14 22:58:13 字數 3220 閱讀 7967

#pragma once

#include#includetypedef struct linknode

node,*pnode;

pnode push_front(pnode phead, int data);//前面進棧

pnode pop_front(pnode phead, int *data);

//----------------------------------

pnode push_back(pnode phead, int data);//後面進棧

pnode pop_back(pnode phead, int *data);

void show(pnode phead);//檢視棧裡面資料

只是簡單模擬一下棧式管理

pnode push_front(pnode phead, int data)//前面進棧

else//有資料的時候就這樣鏈結

p1->pnext = pnew;//這裡要是沒有圖,很看不懂

pnew->pnext = phead;

phead = pnew;

} return phead;

}pnode pop_front(pnode phead, int *data)

else if(phead->pnext==phead)//只有最後乙個資料的做法

else

pnode ptemp = phead;

*data = phead->data;

phead = phead->pnext;

p1->pnext = phead;

free(ptemp);

} return phead;

}void show(pnode phead)

printf("%d\n", ptemp->data);

}pnode push_back(pnode phead, int data)

else//這裡不同而已,看下面解說

pnew->pnext = phead;

p1->pnext = pnew;

} return phead;

}pnode pop_back(pnode phead, int *data)

else if(phead->pnext==phead)//和上面前面出棧一樣

這圖是前面進棧的圖形,

pnode p1 = phead;

while (p1->pnext!=phead)//跑到鍊錶未

p1->pnext = pnew;//這裡主要修改最後乙個節點,指向頭節點,保證了環的存在

pnew->pnext = phead;//前面插入,指向之前的頭節點,

phead = pnew;//頭節點,指向背新加入的節點,就實現了頭插法

這個是前面出棧

pnode p1 = phead;

while (p1->pnext!=phead)//有環就這樣做

pnode ptemp = phead;//儲存頭節點

*data = phead->data;//儲存要釋放的資料

phead = phead->pnext;//頭節點進入下乙個節點

p1->pnext = phead;//已經在最後乙個節點,改next,保證環的存在

free(ptemp);//釋放記憶體

頭部刪除完成

pnew->pnext = phead;//修改指向頭節點

p1->pnext = pnew;//修改指向下乙個節點

下面這張圖就是每次增加資料進棧的圖形,後面進棧

pnode p2 = p1->pnext;//儲存用於釋放

p1->pnext = phead;//修改指向頭節點

*data=p2->data;//儲存釋放的資料

free(p2);//釋放記憶體

結果正確,後進先出。因為這個是前面插入。

結果也正確,3是最後進入的所以最先出,這個跟棧一樣的原理。

棧圖形,不知道看你懂沒。

最後放上測試**

#include"link.h"

void main1()//前面棧

printf("%d\n", data);//最後一次,顯示彈出的資料

system("pause");

}void main()//後面棧

printf("%d\n", data);

system("pause");

}

檢查單鍊錶中是否有環

用兩個指標,從頭節點開始遍歷,乙個指標a每次走1步,乙個指標b每次都2步。如果有環,兩個指標相遇前 b位於a後一位時,那麼a,b指標下次相遇。b位於a後兩位時,那麼a,b指標下下次即將相遇。建立鍊錶 public static node createlist int max return first...

鍊錶 鍊錶環問題總結

給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?1 如何判斷是否存在環?對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存在環,fast遇到n...

鍊錶17 鍊錶判環

題目 如何判斷乙個單鏈表是否有環?有環的話返回進入環的第乙個節點的值,無環的話返回 1。如果鍊錶的長度為n,請做到時間複雜度o n 額外空間複雜度o 1 給定乙個單鏈表的頭結點head 注意另乙個引數adjust為加密後的資料調整引數,方便資料設定,與本題求解無關 請返回所求值。詳見lb7,只是返回...