一. 鏈式棧
之前已經用陣列實現了棧,用鏈棧也遵循先進後出的特點即可。
用鍊錶實現入棧和出棧可以考慮頭插法入棧和尾插法入棧。但不採用尾插法,因為這樣每入棧或出棧一次,都要對棧進行一次遍歷,增加了程式的複雜性。因此採用頭插法,得到的鏈棧棧底元素為鍊錶末尾元素,棧頂元素是頭結點後的元素。
class linkstack
public entry(int val)
} public linkstack()
}
1. 入棧
public void push(int val)
2. 出棧
public boolean pop()
return false;
}
3. 得到棧頂元素
public int gettop()
return -1;
}
4.列印棧內元素
public void show()
system.out.println();
}
測試一下
二. 迴圈佇列
佇列是一種先進先出的線性資料結構,即在隊頭進行刪除,在隊尾進行插入。隊頭用front表示,隊尾用rear表示。
實現順序隊考慮用陣列,但由於陣列的長度有限,可能會出現如圖假溢位的情況
迴圈佇列
因此,我們構造的迴圈佇列應該如下圖
接下來看一下關於佇列的基本操作
class queuelink
public queuelink(int size)
}
1. 判斷隊空
front = rear,隊列為空
public boolean isempty()
2.判斷隊滿
front = (rear + 1)%allsize
public boolean isfull()
return false;
}
3.入隊
public void push(int val)
this.elem[this.rear] = val;
this.rear = (this.rear + 1) % allsize;//不能rear++,rear一直在0~allsize-1的範圍內
this.usedsize++;//佇列長度加一
}
4. 出隊
public void pop()
this.elem[front] = -1;//給出隊的位置標誌-1,表示這個元素已出隊
this.front = (this.front + 1)%allsize;//front後移一位
this.usedsize--;//佇列長度減一
}
5.得到隊頭
public int gettop()
return this.elem[front];//把front位置的元素return出去
}
三. 用兩個棧實現乙個佇列
public class testdemo8
s1.push(val);
} public void popque()
while(s1.top > 1)
s1.top = 0;
while(s2.top>0)
}public int getfront()
return s1.elem[0];
} public void show()
system.out.println();
} public static void main(string args)
}
資料結構之鏈式棧
好久不見,前面我們學過了資料結構的順序棧。今天我們來學習下鏈式棧的實現,鏈式棧的話,還是要利用前面我們實現的鏈式鍊錶,不知道鏈式鍊錶的,出門左轉,前面就有介紹。第七個例子,鏈式棧的實現 注 把我們先前實現的鏈式鍊錶的標頭檔案和實現檔案包含進來 標頭檔案 ifndef linkstack h defi...
資料結構 棧之鏈式儲存
跟鍊錶結構一樣,只是多了條限制 只能從煉表頭插入和刪除。原始碼 include include include include 棧的鏈式儲存 typedef struct data typedef struct stack 初始化空棧 void initstack stack s 判斷是否為空棧 i...
資料結構 鏈式棧
編譯錯誤 passing const linkstack as this argument discards qualifiers fpermissive 解決方法 c 中const 引用的是物件時只能訪問該物件的const 函式,因為其他函式有可能會修改該物件的成員,編譯器為了避免該類事情發生,會...