1. 程式人生 > >元素出棧、入棧順序的合法性

元素出棧、入棧順序的合法性

#include 
#include 
using namespace std;

template 

class Stack
{
public:
	Stack()
		:_str1(NULL)
		, _str2(NULL)
	{}

	~Stack()
	{
		if (_str1 != NULL)
		{
			delete[] _str1;
		}
		if (_str2 != NULL)
		{
			delete[] _str2;
		}
	}

	bool IsPopOrder(const char* Push, const char* Pop, int Pushlength, int Poplength)
	{
		if (Push == NULL || Pop == NULL||(Pushlength!=Poplength))
		{
			cout << "不合法" << endl;
			return false;
		}
		stack sc;
		while (*Push)
		{
			if (sc.size() == 0 || sc.top()!=*Pop)        
			{
				sc.push(*Push++);
			}
			else
			{
				sc.pop();
				++Pop;
			}
		}
		while (sc.size())
		{
			if (sc.top() != *Pop++)
			{
				cout << "不合法" << endl;
				return false;
			}
			sc.pop();
		}
		cout << "合法" << endl;
		return true;
	}
protected:
	char* _str1;
	char* _str2;
};

void Test1()
{
	char* str1 = "12345";
	char* str2 = "45321";
	Stack s;
	s.IsPopOrder(str1, str2, 6, 6);
}

void Test2()
{
	char* str1 = "12345";
	char* str2 = "45231";
	Stack s;
	s.IsPopOrder(str1, str2, 6, 6);
}

相關推薦

應用---元素順序合法性判斷

利用棧來判斷元素出入棧順序的合法性 例如:入棧的序列(1,2,3,4,5),出棧序列為 (4,5,3,2,1) 解決思路如下: 我們設定一箇中間棧:tempStack,記錄一個出棧順序下標index 1、按入棧順序,存入一個元素到tempStack中 2、比較

元素順序合法性

#include #include using namespace std; template class Stack { public: Stack() :_str1(NULL) , _str2(NULL) {} ~Stack() { if (_str1 != NULL)

和佇列的面試題(五)---判斷元素順序合法性

題目: 如:入棧的序列(1,2,3,4,5),出棧序列為 (4,5,3,2,1)是合法序列, 入棧的序列(1,2,3,4,5),出棧序列為(1,5,3,2,4)是不合法序列 一:判斷元素出

順序的定義初始化等操作 C++程式碼實現 ——感想

using namespace std; /*順序棧的定義*/ #define Stack_Size 100 typedef struct sqStack {        char *elem;        int top;        int stackSize;//棧陣列長度 }sqStack;

php的定義和的實現

棧是線性表的一種,他的特點是後入先出,可以這麼理解,棧就像一個存東西的盒子,先放進去的在最底層,後放進去的在上層,因為上層的東西把底層的東西壓住了,下層的想要出去就必須把上層的先拿開才行。 定義:棧是限制插入和刪除都只能發生在一個位置上進行的線性表,該位置是線性表的末端,叫做棧的頂。 口訣:“後進先出”,

實現一個,要求實現出返回最小值的時間複雜度為O(1)

  由棧的一些基本操作,很容易使出棧和入棧的時間複雜度為O(1),但是由於入棧資料元素順序不一定是有序的,故不能直接實現返回最小值的時間複雜度為O(1)。下面提供兩種方法: (一)設定一個特殊的資料結構型別,包括兩個棧_data棧和_mindata棧,_data棧和原來的棧

順序:創建&初始化計算中有效數據長度獲取頂數據清空銷毀

機制 按位取反 軟件 技巧 stdlib.h sig length stack capacity /* 順序棧的實現: 初始化 入棧 出棧 計算棧的有效數據長度 獲取棧頂數據 清空棧 銷毀棧*/#include <std

【資料結構實驗二】順序的建立

版權申明: 實驗二 順序棧的建立、入棧和出棧 實驗目的: 掌握棧的建立、入棧和出棧操作;理解順序棧在入棧和出棧時對Top指標的移動。 實驗內容: 1. 通過結構體宣告線性棧; 2. 在初始化操作

採用順序儲存實現的初始化操作。/驗證實驗/

#include<stdio.h>  #include<stdlib.h>  #define maxsize 100  typedef struct SqStack{      int data[maxsize];      int top;  }Sq

JAVA順序操作——初始化判斷空判斷滿

順序棧:使用一組連續的記憶體依次儲存棧中的資料,定義一個top變數來儲存棧頂序號。 棧結構是“後進先出”的原則。 棧的最基本操作有兩個:push(入棧) + pop(出棧) import java.util.Scanner; /** * @author Lily

C語言模擬順序的建立操作

#include<stdio.h> #include<stdlib.h> #define true 1 #define false 0 #define ok 1 #define error 0

順序的C語言實現——初始化函式函式和函式

將順序棧的結構定義為: #define  M  100   //棧的空間 typedef struct   {   int data[M]; int top;   } SqStack; 試寫出SqStack的初始化函式、入棧函式和出棧函式 。並在main()函式中測試上述

資料結構(C語言)的建立並進行進位制轉換

十進位制數轉換為八進位制: | N |N div 8(商) | N mod 8(餘數) |1348| 168 | 4 | 168 | 21 | 0

連結串列與——陣列單鏈表翻轉

陣列入棧出棧 class Stack{ private Object[] data = new Object[0]; //棧的內容 private int size = 0; //棧的元素個數

的建立統計長度

C++實現,採用連結串列儲存,因為順序儲存較為簡單,不再重複敘述。 #include <iostream> using namespace std; struct node //棧的節點 { int data;

的基本操作

article 安全 empty scan -s type fine mod pos #include<stdio.h> #include<stdlib.h> #define LENGTH 100 //初始分配棧的長度 #define ADD

一個序列為ABCDEF,則不可能的序列是

size 核心 span 順序 例如 錯誤 必須 分析 2.6 技術之瞳 阿裏巴巴技術筆試心得習題2.65:   一個棧的入棧序列為ABCDEF,則不可能的出棧序列是(D)   A、DEFCBA    B、DCEFBA    C、FEDCBA   D、FECDBA    E

【資料結構】實現一個要求實現Push()Pop()Min(返回最小值)的時間 複雜度為O(1)

文章目錄 思路 MinStack.h MinStack.c Test.c 棧的基本實現: https://blog.csdn.net/weixin_41892460/article/details/8297385

順序已及佇列的實現

#include<iostream> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define QUEUE_INIT_SIZE 100 #define MAXSIZE 100 typedef int SElemTy

實現一個,返回最小值的操作的時間複雜度為O(1)的

棧的特點的是先進後出,這裡實現的棧是在這個基礎上加以特定的功能。 用一個原生棧實現 這種方法需要_min來記錄棧頂元素到棧底元素的最小值,每次入棧之前需要先比較入棧元素和_min的值,接著將它兩依次入棧;出棧的時候需要每次Pop兩次,並記錄第二次的值,即為新