-
因為 p 和 q 是動態分配的,所以 p 或 q 及其下乙個節點不會與 p 或 q 連續儲存,而是通過下乙個指標來維護它們之間的關係,因此不能使用 p++ 和 q++
對於連續的記憶體空間(如陣列),可以這樣使用:
例如 int a[100];
int *p=a;
p++ 相當於移動到 a[1],即 p 在開頭的下乙個位置......
-
P->Next 中的 P 和 Q、Q->Next 是指向空格的指標。 各個指標之間沒有邏輯關係。 每個空間之間的關係由保留在其中的下乙個空間連線起來; 所以 p++、q++ 不能表示指向下乙個空格的指標。
它僅由 next 表示。
-
p->next 是指指向下乙個元素,但該元素不一定是它旁邊的元素,或者它可能很遠。 p->next這表示指標指向 **。 而P++只是上面最簡單的部分,也就是它旁邊的那個,塔可以理解為P->Next的乙個特例。
-
p++ 是遞增儲存在 p 中的位址。
p = p->next 是結構中 p 等於 p 的下乙個成員的位址。
p++ 通常用於連續空間,p = p->next 用於非連續鍊表。
-
同學,你能保證這些位址都是連續的嗎?
-
First++p:在執行迴圈的內部語句之前,指標 p 自遞增一次,指向第二個元素。
-
++p 和 p++ 在這裡是一樣的。
p-1)=*p;這意味著將資料從後面複製到前面。
例如,原始 elem= 假設最多可以容納 4 個資料,當 i=2 時,首次執行 *(p-1)=*p; 結果是 elem[2]=elem[3];
結果是elem=,但同時由於減去1,長度變為3,有效資料為1、2、4,刪除第i(第2)個資料的操作完成。
-
Front++ 和 Rear ++ 效果分別相同,沒錯。 但這不是 pre-++ post-++ 的問題,似乎你不明白如何執行 for() 中的 3 個表示式 - 第乙個表示式(第乙個; 進入for迴圈時只執行一次,迴圈完成後才會執行; 第二個表示式(兩個; 數字之間的乙個)必須首先執行每個週期;第三個表示式(第二個; After each loop) 在每個迴圈執行 “body” 後執行。因此,在執行 “body” * p-1)=*p 之前,上述語句中的 p 僅遞增一次而不是兩次。
-
First++p:在執行迴圈的內部語句之前,指標 p 自遞增一次,指向第二個元素。 p<=q:
如果 p 的位址大於 q 的位址,則迴圈跳出。*(p-1)=*p:執行迴圈的內部語句,當前指標 p 指向該元素前乙個元素的值,複製為 q 位址的值。
-
然後 a->next=a->next->next; (刪除 B 節點,這裡我想問一下,這裡是否有必要新增乙個 free(b) 來刪除 B 節點? )
首先,a->next =a->next->next 意味著只是將 a 的指標指向 c,不是刪除 b,b 仍然存在於記憶體中,而是失去與 a c 的後繼關係,使用 free 釋放 b 節點。
而隨後的 p=p->next 並沒有刪除節點,而是讓指標 p 向後移動。
-
我也在學習資料結構...... 我不認為這種說法真的可以逆轉......
-
試想一下這個過程,雙頭鍊表插入操作保證雙向性,就是做好鏈結,如果你了解程式的話,很簡單,看看選項,畫3個方塊表示節點,畫箭頭代表雙向連線,然後按照給出的步驟畫一張圖,看會不會有明顯的錯誤。
-
在順序儲存結構(實際上是乙個陣列)中,線性表中儲存的資料(陣列)的基址(起始位址)為表的長度(資料元素數),q與指標計算後陣列的情況相同,如上公式: 整數 a[10],*p=a;p 指向第乙個元素。
p=a+1;指向第二個元素。
則:p=a+10-1; 指向最後乙個陣列元素,即 a[9]。
-
函式中沒有 q->next=p; 在本例中,q 是插入前的尾節點。 然後,q 的下乙個(新插入的節點)將由 q 指向節點中的下乙個字段。
插入單向鍊表只需要對 s->next 和 p->next 的指標稍作更改。
s->next = p->next;
p->next = s;
單鏈表第i個資料插入節點的演算法思路如下:
1. 宣告乙個指向鍊表第乙個節點的指標 p,並從 1 初始化 j;
2.當j
3.如果鍊表末尾的p為空,則表示第i個元素不存在;
4.否則搜尋成功,系統中會生成乙個空節點S;
5. 將資料元素 E 分配給 s->data;
6. 插入單向鍊表的標準語句 s->next = p->next; p->next = s;
7.退貨成功。
-
堆疊是自定義的,具體取決於堆疊的定義方式,如果堆疊頂部指標指向下乙個可用堆疊空間,則需要 *(; 如果堆疊指標的頂部指向當前可能的空間,請使用 *(
-
是一樣的,命名與它無關,q->next =p; 作業與指標指向相關,只是為了更好地理解。
-
指標的宣告。
指向鍵入 *p;
這表明這是乙個指標,當宣告時,變數 p 不是作為指標本身呼叫的,而是作為指標的目標呼叫的!
例如:P->Next
這不是指標 p 的下乙個,而是指標 p 指向的目標中的下乙個結構作為自定義資料結構,建立後,系統只能返回整個結構的第乙個位址,所以只能用乙個指標連線,結構中的指標變數命名為 next 只是乙個國際慣例, 即使你把它改成*n,也是一樣的,但是當你以後使用它時:
p->next 可以改為 p->n,常用的指標賦值有兩種:
1. 獲取目標的位址並將其分配給指標。
p = & target & 是位址字元。
2.將另乙個指標指向的目標位址分配給指標p = q;
在實踐中,許多資料結構是現成的。 比如資料庫查詢,幾句話就夠了,如何實現查詢已經是資料庫軟體開發人員搞定的。 如果你開發一般的應用軟體或資料庫資料庫應用,你確實用到很少的資料結構,甚至感覺不到它的存在,但如果你做人工智慧、作業系統、開發資料庫系統之類的事情,恐怕你對資料結構的了解還不夠。
一方面是難學的,另一方面是有現成的。 大多數演算法大師都參加過ACM大賽,專門針對資料結構和演算法的比拼,希望越來越多的人參與進來。
所謂遍歷,是指樹中的每個節點沿著某條搜尋路線訪問一次,並且只訪問一次。 接入節點的作用取決於具體的應用程式問題。 遍歷是二叉樹上最重要的操作之一,也是二叉樹上其他操作的基礎。 >>>More