1. 程式人生 > >棧應用---元素出棧、入棧順序的合法性判斷

棧應用---元素出棧、入棧順序的合法性判斷

利用棧來判斷元素出入棧順序的合法性

  • 例如:入棧的序列(1,2,3,4,5),出棧序列為 (4,5,3,2,1)
  • 解決思路如下:
  • 我們設定一箇中間棧:tempStack,記錄一個出棧順序下標index 1、按入棧順序,存入一個元素到tempStack中 2、比較tempStack的棧頂元素與出棧順序的第index個元素比較 相同,則進行3,否則進行1 3、彈出tempStack的棧頂元素,index++。執行2。 最後,如果迴圈結束後,tempStack為空,則表示出棧順序正確。否則,出棧順序錯誤。
void CheckPushPopStackLegal()
{
	Stack s;
	int PushArray[] = { 1, 2, 3, 4, 5 };
	int PopArray[] = { 4, 5, 1, 2, 3 };
	int index = 0;
	int i = 0;
	InitStack(&s);
	while (i < 5)
	{
		PushStack(&s, PushArray[i]);
		while (TopStack(&s) == PopArray[index])
		{
			PopStack(&s);
			index++;
		}
		i++;
	}

	if (EmptyStack(&s))
		printf("出棧順序正確!\n");
	else
		printf("出棧順序不正確!\n");
}

棧的封裝我就不往上放了,判斷元素出入棧順序合法性的思想就是這個。如有更好的思路,歡迎下方留言討論。