flag46 判斷出棧序列是否合法的討論。

2021-08-16 08:47:08 字數 1241 閱讀 3891

根據給出的入棧順序1,2,3,4....

以及棧的容量

然後給出幾個待測試的序列比如

int a[7]=;

int b[7]=;

int c[7]=;

int d[7]=;

int e[7]=;//這裡為了方便測試,不再一一給出資料

演算法的思想是,對棧在入棧的過程中,當入棧元素恰好等於待出棧元素,那麼就讓他出棧,同時把出棧序列當前等待元素後移一位,迴圈最後判斷標誌位和棧是否為空,本題使用鏈棧

# include

# include

typedef struct node

node,*pnode;

typedef struct stu

base,*pbase;

bool isempty(pbase s);

void init(pbase s);

void push(pbase s,int val);

void pop (pbase s,int* val);

void bianli(pbase s);

int size(pbase s);

int gettop(pbase s);

void test(pbase s,int* a,int t1,int t2);

int main()

;int a[7]=;

int b[7]=;

int c[7]=;

int d[7]=;

int e[7]=;

test(&s,a,5,7);

return 0;

}void init(pbase s)

void push(pbase s,int val)

void pop (pbase s,int* val)

}bool isempty(pbase s)

void bianli(pbase s)

printf("\n");

}int size(pbase s)

return i;

}int gettop(pbase s)

void test(pbase s,int* a,int t1,int t2)

while(!isempty(s) && gettop(s)==a[current])//反覆出棧 匹配

}if(isempty(s)==true && flag==true)//不為空且標誌位正確

else printf("no\n");

}

判斷出棧序列是否合法

問題描述 對於乙個棧,已知元素的進棧序列,判斷乙個由棧中所有元素組成的排列是否是可能的出棧序列。比如,進棧序列為1 2 3 4,則可能的出棧序列有4 3 2 1,1 4 3 2等。而1 4 2 3就不是。輸入形式 從標準輸入讀取第一行是乙個整數n 3 n 10 代表有n個元素,其進棧序列是1 2 3...

判斷出棧序列是否合法

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...

資料結構實驗題 判斷入棧出棧操作序列是否合法

假設以i和o分別代表入棧和出棧操作,設計乙個演算法判斷任一給定的棧操作序列是否合法。例如 ioioiiooio 演算法的設計思想 依次掃瞄出棧入棧操作序列,每掃瞄至乙個位置,需檢查出棧次數是否大於入棧次數,若大則非法。掃瞄結束後,再檢查出棧次數與入棧次數是否相等,若不相等,則非法。c 如下 incl...