#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,只是返回...