亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stackexercise.h

?? 迷宮.控制臺應用程序.適合出學c語言又想提高c語言的朋友
?? H
字號:
#ifndef STACK_EXERCISES_H
#define STACK_EXERCISES_H

#include "main.h"
#include "iostream"
using namespace std;
//棧中的數據成員
typedef struct
{
	SPos sPos;				//坐標
	int iDirect;			//方向 0:西 1:北 2:東  3:南
	int iOrder;				//從入口到出口的路徑序號
}SStackDataType;
//棧節點
typedef struct SStackNode
{
	SStackDataType stackData;
	SStackNode *pNext;
}SStackNode;
//棧
typedef struct SStack
{
	SStackNode *pTop;
	SStackNode *pBase;
	int iStackSize;				//棧的大小,即占內存空間大小,以元素為單位
}SStack;


//======================================================================= 
//函數名:	StackDataMoving
//參數:              
//返回值:	NULL
//說明:	棧的數據類型對象賦值函數
//======================================================================= 
void StackDataMoving( SStackDataType *pDesData,SStackDataType *pSrdData );

//======================================================================= 
//函數名:	InitStack
//參數:		SStack &stack
//返回值:	true || false
//說明:	初始化棧函數
//			成功返回 true,否則返回 false
//======================================================================= 
bool InitStack( SStack &stack );

//======================================================================= 
//函數名:	DestroyStack
//參數:		SStack &stack
//返回值:	NULL
//說明:	銷毀棧函數
//======================================================================= 
void DestroyStack( SStack &stack );

//======================================================================= 
//函數名:	ClearStack
//參數:		SStack &stack
//返回值:	NULL
//說明:	清空棧函數
//======================================================================= 
void ClearStack( SStack &stack );

//======================================================================= 
//函數名:	StackEmpty
//參數:		SStack &stack
//返回值:	true || false
//說明:	判斷棧空函數
//			如果棧空返回 true,否則返回 false
//======================================================================= 
bool StackEmpty( SStack &stack );

//======================================================================= 
//函數名:	GetStackLength
//參數:		const SStack &stack
//返回值:	int iStackSize
//說明:	獲得棧的元素個數函數
//			返回棧的元素個數,即棧的長度
//======================================================================= 
int GetStackLength( const SStack &stack );

//======================================================================= 
//函數名:	StackDataTop
//參數:		const SStack &stack
//			SStackDataType &stackData
//返回值:	true || false
//說明:	獲得棧頂數據函數
//			如果棧不為空返回 true,否則返回 false
//======================================================================= 
bool StackDataTop( const SStack &stack,SStackDataType &stackData );

//======================================================================= 
//函數名:	GetStackTopData
//參數:		const SStack &stack
//返回值:	SStackDataType stackData
//說明:	獲得棧中元素個數函數
//			返回棧中元素個數,即棧的長度
//======================================================================= 
bool StackTraverse( SStack &stack, void (*pVisit)() );

//======================================================================= 
//函數名:	Push
//參數:		SStack stack; 
//			SStackDataType stackData
//返回值:	true || false 
//說明:	壓棧處理函數
//			成功返回 true,否則返回 false
//======================================================================= 
bool Push( SStack &stack, SStackDataType stackData );


//======================================================================= 
//函數名:	Pop
//參數:		SStack stack; 
//			SStackDataType &stackData	返還它在棧中數據成員
//返回值:	true || false 
//說明:	出棧處理函數
//			成功返回 true,否則返回 false
//======================================================================= 
bool Pop( SStack &stack, SStackDataType &stackData );
 

 
//======================================================================= 
//函數名:	StackTokcatS
//參數:		SStack stack; 
 //返回值:	true || false 
//說明:	將棧內所有元素次序顛倒,構成新的棧。
//======================================================================= 
bool StackTokcatS( SStack &stack );
 
//======================================================================= 
//函數名:	Pass
//參數:		 
//返回值:	true || false 
//說明:	判斷當前點是否可以通過
//			成功返回 true,否則返回 false
//======================================================================= 
bool Pass( SMazeMap *pMazeMap,SPos *pCurPos );
 
//======================================================================= 
//函數名:	FootPrint
//參數:		 
//返回值:	NULL
//說明:	留下足跡
//======================================================================= 
void FootPrint( SMazeMap *pMazeMap,SPos *pCurPos );
 
//======================================================================= 
//函數名:	MarkPrint
//參數:		 
//返回值:	NULL
//說明:	標記不能通過
//======================================================================= 
void MarkPrint( SMazeMap *pMazeMap,SPos *pCurPos );
//======================================================================= 
//函數名:	GetNextPos
//參數:		SPos *pCurPos
//			int iDir=DIR_W     //默認方向向西
 //返回值:	true || false 
//說明:	下一個位置
//======================================================================= 
//void NextPos( SMazeMap *pMazeMap,SPos *pCurPos, int iDir=DIR_W );
void NextPos( SPos *pCurPos, int iDir=DIR_W );
 

//======================================================================= 
//函數名:	MazePath
//參數:		SStack &stack					//迷宮路徑存放到的位置
//			SMazeMap *pMazeMap				//原始迷宮地圖
//			SPos *pStartPos					//迷宮的入口位置
//			SPos *pEndPos					//迷宮的出口位置
//返回值:	true || false
//說明:	迷宮路徑 
//			成功返回 true,否則返回 false
//======================================================================= 
bool MazePath(SStack &stack,SMazeMap *pMazeMap );

//======================================================================= 
//函數名:	MazeMapHelp
//參數:		SMazeMap *pMazeMap				//原始迷宮地圖
//返回值:	true || false 
//說明:	迷宮路徑幫助
//			在給出的原始迷宮地圖中標出路徑幫助路徑,顯示出來。
//			用戶按下 P/p 鍵提供路徑幫助。
//			成功返回 true,否則返回 false
//======================================================================= 
SStack* MazePathHelp(SMazeMap *pMazeMap );

// StackExercises_20080411_01_0001.cpp : Defines the entry point for the console application.
//

 
//
//cpp
 
bool StackTokcatS( SStack &stack )
{
	if( !StackEmpty( stack ) )
	{
 		SStack *pS1=new SStack;
		SStack *pS2=new SStack;
		SStackDataType stackData;
 		InitStack( *pS1 );
 		InitStack( *pS2 );
		while( !StackEmpty( stack ) )
		{
			Pop( stack, stackData );
			Push( *pS1, stackData );
		}
		while( !StackEmpty( *pS1 ) )
		{
			Pop( *pS1, stackData );
			Push( *pS2, stackData );
		}
		while( !StackEmpty( *pS2 ) )
		{
			Pop( *pS2, stackData );
			Push( stack, stackData );
		}
		DestroyStack( *pS1 );
		DestroyStack( *pS2 );
		return true;
	}
	return false;
}
SStack* MazePathHelp(SMazeMap *pMazeMap )
{
	static SStack stack;
	if( MazePath( stack, pMazeMap ) )
	{
		cout<<"尋找路徑成功!"<<endl;
/* 		if( StackTokcatS( stack ) )
		{
			return &stack;
		}*/
	}
	else
	{
		cout<<"尋找路徑失敗!"<<endl;
	}
	return NULL;
}
void testShowDirect(int iDir)
{
/*	static int iCount=0;
	switch( iDir )
	{
	case 1:
		cout<<"西 " ;
		break;
 	case 2:
		cout<<"北 " ;
		break;
	case 3:
		cout<<"東 " ;
		break;
	case 4:
	case 0:
		cout<<"南 " ;
		break;
	}
	iCount++;
	if( iCount % 20 == 0 )
	{
		iCount=0;
		cout<<endl;
	}*/
}
bool MazePath(SStack &stack,SMazeMap *pMazeMap )
{
	SPos *pStartPos = &pMazeMap->spBegin;
	SPos *pEndPos = &pMazeMap->spEnd;
	InitStack( stack );
 	int iCurStep=1;
//	SPos *pCurPos = pStartPos;
	//??
	SStackDataType stackData;
	stackData.iOrder=1;
	stackData.iDirect=1;
	stackData.sPos.iRow= pStartPos->iRow;
	stackData.sPos.iCol= pStartPos->iCol-1;
  	Push( stack, stackData );
	//
	testShowDirect( stackData.iDirect );
	do
	{ 
		if( Pass( pMazeMap, &stackData.sPos ) )
		{
			iCurStep++;
			FootPrint( pMazeMap, &stackData.sPos );
 			stackData.iDirect = DIR_W;
			stackData.iOrder = iCurStep;
 			Push( stack, stackData );
			//
			testShowDirect( stackData.iDirect );
 			if(  ( stackData.sPos.iRow == pEndPos->iRow ) && \
				( stackData.sPos.iCol == pEndPos->iCol ) )
			{
				pMazeMap->cMazeMap[pEndPos->iRow][pEndPos->iCol]=MAZE_EXIT;
				return true;
			}
			NextPos( &stackData.sPos, DIR_W );
		}// if
		else //當前位置不能通過
		{
			if( !StackEmpty( stack ) )
			{
 				Pop( stack, stackData );
				//
				testShowDirect( (stackData.iDirect+2)%4 );
				iCurStep--;
 				while( stackData.iDirect == 4 && !StackEmpty( stack ) )
				{
					MarkPrint( pMazeMap,&stackData.sPos );
					Pop( stack, stackData );
					//
					testShowDirect( (stackData.iDirect+2)%4 );
					iCurStep--;
				}
				if( stackData.iDirect < 4 )
				{
 					stackData.iDirect++;
					Push( stack, stackData );
					iCurStep++;
					testShowDirect( stackData.iDirect );
					NextPos( &stackData.sPos, stackData.iDirect );
				}//if
			}//if
		}//else
	}while( !StackEmpty( stack ) );
	return false;
}
bool Pass( SMazeMap *pMazeMap,SPos *pCurPos )
{
	if( pMazeMap->cMazeMap[pCurPos->iRow][pCurPos->iCol] != MAZE_BAR && \
		pMazeMap->cMazeMap[pCurPos->iRow][pCurPos->iCol] != MAZE_PASS_PATH )
	{
		if( pMazeMap->cMazeMap[pCurPos->iRow][pCurPos->iCol] != MAZE_DEAD_PATH )
		{
  			return true;
		}
	}
	return false;
	
}
void NextPos( SPos *pCurPos, int iDir )
{
  	switch( iDir )
	{
	case DIR_W:
		pCurPos->iCol--;
		break;
	case DIR_N:
		pCurPos->iRow--;
		break;
	case DIR_E:
		pCurPos->iCol++;
		break;
	case DIR_S:
		pCurPos->iRow++;
		break;
	}
}
void MarkPrint( SMazeMap *pMazeMap,SPos *pCurPos )
{
	pMazeMap->cMazeMap[pCurPos->iRow][pCurPos->iCol] = MAZE_DEAD_PATH;
}
void FootPrint( SMazeMap *pMazeMap,SPos *pCurPos )
{
	pMazeMap->cMazeMap[pCurPos->iRow][pCurPos->iCol] = MAZE_PASS_PATH;
}




void StackDataMoving( SStackDataType *pDesData,SStackDataType *pSrdData )
{
//	pDesData->iNumber = pSrdData->iNumber;
 	pDesData->iDirect = pSrdData->iDirect;
 	pDesData->iOrder = pSrdData->iOrder;
 	pDesData->sPos.iRow = pSrdData->sPos.iRow;
 	pDesData->sPos.iCol = pSrdData->sPos.iCol;
}
bool Pop( SStack &stack, SStackDataType &stackData )
{
	if( !StackEmpty( stack ) )
	{
		SStackNode *pTopNode=stack.pTop;
		StackDataMoving( &stackData, &(stack.pTop->stackData) );
		stack.pTop = stack.pTop->pNext;
		stack.iStackSize -= sizeof(SStackNode);
		delete pTopNode;
		return true;
	}
	return false;
}
bool Push( SStack &stack, SStackDataType stackData )
{
 	SStackNode * pNewNode = new SStackNode;
	if( pNewNode != NULL )
	{
		StackDataMoving(&(pNewNode->stackData), &stackData);
		pNewNode->pNext = stack.pTop;
		stack.pTop = pNewNode;
		stack.iStackSize += sizeof(SStackNode);
		return true;	
	}
	return false;
}
bool StackDataTop( SStack &stack,SStackDataType &stackData )
{
	if( !StackEmpty( stack ) )
	{
	 	StackDataMoving(&stackData, &(stack.pTop->stackData));
		return true;
	}
	return false;
}
int GetStackLength( const SStack &stack )
{
	return stack.iStackSize;
}
bool InitStack( SStack &stack )
{
 	SStackNode * pHeadNode = new SStackNode;
	if( pHeadNode != NULL )
	{
// 		pHeadNode->stackData.iNumber=0;
		pHeadNode->pNext = NULL;
		stack.pTop = pHeadNode;
		stack.pBase = pHeadNode;
		stack.iStackSize = 0;					//忽略頭節點所占的內存
		return true;
	}
	return false;
}
void DestroyStack( SStack &stack )
{//不知道對象可不可以直接用 delete 刪除
	if( stack.pTop != NULL )
	{
		SStackNode *pCurNode;
		while( !StackEmpty( stack ) )
		{
			pCurNode = stack.pTop->pNext;
			delete stack.pTop;
			stack.pTop = pCurNode;
		}
		stack.iStackSize = 0;
		delete stack.pTop;
		delete stack.pBase;
	}
}
void ClearStack( SStack &stack )
{
	if( stack.pTop != NULL )
	{
		SStackNode *pCurNode;
		while( !StackEmpty( stack ) )
		{
			pCurNode = stack.pTop->pNext;
			delete stack.pTop;
			stack.pTop = pCurNode;
		}
		stack.iStackSize = 0;
	}
}

 bool StackEmpty( SStack &stack )
{
 	if( stack.pTop != stack.pBase )
	{
		return false;
	}
	return true;
}
 
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美韩国日本一区| 色菇凉天天综合网| 免费观看30秒视频久久| 亚洲午夜一区二区三区| 亚洲影院久久精品| 亚洲成人免费在线| 日本不卡视频一二三区| 亚洲aaa精品| 国内一区二区视频| 福利电影一区二区| av网站免费线看精品| 91在线播放网址| 欧美亚洲动漫精品| 91精品久久久久久久91蜜桃| 日韩欧美aaaaaa| 久久理论电影网| 亚洲天堂免费看| 水蜜桃久久夜色精品一区的特点| 久久精品国产亚洲高清剧情介绍| 国产精品一区2区| 91美女片黄在线观看91美女| 欧美肥妇bbw| 国产婷婷一区二区| 亚洲三级免费电影| 日韩精品一级中文字幕精品视频免费观看 | 91精品国产91久久久久久最新毛片 | 成人开心网精品视频| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 欧美精品乱码久久久久久按摩 | 洋洋成人永久网站入口| 午夜精品在线看| 国产成人精品一区二区三区网站观看| 91在线观看一区二区| 欧美一级片在线看| 中文字幕一区二区在线观看| 亚洲高清中文字幕| 波多野结衣欧美| 欧美成人性福生活免费看| 综合色天天鬼久久鬼色| 久久电影网站中文字幕| 在线精品视频一区二区| 欧美精品一区二区在线播放| 一区二区三区视频在线观看| 黑人精品欧美一区二区蜜桃| 日本韩国一区二区| 国产欧美日韩精品a在线观看| 亚洲网友自拍偷拍| 91性感美女视频| 国产日韩欧美高清在线| 蜜桃一区二区三区四区| 欧美亚洲一区三区| 亚洲欧洲国产日韩| 国产精品一二三区| 精品国产乱码久久久久久浪潮| 亚洲午夜精品一区二区三区他趣| 成人一区在线观看| 国产欧美综合色| 国产精品自产自拍| 26uuu亚洲综合色欧美| 午夜精品一区二区三区电影天堂| 97精品久久久久中文字幕| 中文在线一区二区| 成人做爰69片免费看网站| 国产日韩v精品一区二区| 久久精品久久99精品久久| 欧美一级黄色片| 日日摸夜夜添夜夜添国产精品| 欧美亚洲另类激情小说| 亚洲精品你懂的| 色婷婷av一区| 亚洲在线视频一区| 欧美色图免费看| 日本一道高清亚洲日美韩| 欧美精品xxxxbbbb| 男女男精品视频网| 久久免费看少妇高潮| 国产麻豆成人传媒免费观看| 国产午夜精品久久久久久久 | 日韩久久免费av| 久久国产成人午夜av影院| 日韩免费看网站| 国产毛片精品国产一区二区三区| 欧美成人午夜电影| 成人激情免费电影网址| 亚洲男同性恋视频| 在线观看中文字幕不卡| 亚洲成av人在线观看| 日韩一区二区精品| 国产精品一区二区久久不卡 | 亚洲精品国久久99热| 91久久精品午夜一区二区| 亚洲国产精品久久久久婷婷884| 欧美日韩久久久| 国产在线视频一区二区三区| 国产精品你懂的在线欣赏| 91久久精品日日躁夜夜躁欧美| 亚洲综合色噜噜狠狠| 精品久久久久99| 91视频com| 蜜桃视频在线观看一区| 国产日产欧美一区| 色婷婷精品久久二区二区蜜臀av| 亚洲第一综合色| 国产亚洲精品精华液| 在线观看欧美日本| 国模冰冰炮一区二区| 亚洲乱码国产乱码精品精可以看 | 日本不卡不码高清免费观看| 久久久99精品久久| 在线免费观看视频一区| 国产在线视频不卡二| 夜夜夜精品看看| 久久久精品蜜桃| 欧美精品黑人性xxxx| 成人午夜av在线| 日韩国产欧美在线观看| 欧美国产成人在线| 日韩美女一区二区三区四区| 日本高清不卡视频| 国产+成+人+亚洲欧洲自线| 日韩高清中文字幕一区| 国产精品伦理一区二区| 精品国产伦一区二区三区观看体验 | 久久精品欧美一区二区三区不卡| 在线观看不卡视频| 成人av免费观看| 激情综合色综合久久| 亚洲电影在线免费观看| 国产精品毛片无遮挡高清| 日韩女优制服丝袜电影| 91麻豆精品国产自产在线| 色婷婷av一区二区三区软件| 国产 欧美在线| 国产精品香蕉一区二区三区| 男女激情视频一区| 日韩电影在线观看网站| 亚洲成a人v欧美综合天堂下载 | 欧美一卡在线观看| 欧美视频三区在线播放| 色婷婷一区二区| 99久久99久久免费精品蜜臀| 国产不卡视频一区二区三区| 精品一区二区在线看| 蜜桃av一区二区在线观看| 日本欧美一区二区| 美国av一区二区| 麻豆一区二区三区| 捆绑变态av一区二区三区| 久久99精品国产麻豆婷婷| 日产国产高清一区二区三区| 日本伊人午夜精品| 毛片av一区二区三区| 韩国午夜理伦三级不卡影院| 蜜桃视频一区二区三区在线观看| 久久国产人妖系列| 黑人巨大精品欧美一区| 国产激情视频一区二区在线观看| 国产白丝网站精品污在线入口| 成人激情小说网站| 91在线视频播放| 欧美久久一二区| 日韩欧美一区在线| www国产亚洲精品久久麻豆| 国产欧美中文在线| 亚洲私人黄色宅男| 亚洲123区在线观看| 日产精品久久久久久久性色| 九九精品一区二区| 成人app网站| 欧美日韩高清影院| 精品国免费一区二区三区| 国产婷婷色一区二区三区在线| 1024成人网色www| 午夜激情一区二区三区| 经典三级在线一区| 成人av网站在线观看| 欧美日韩国产精品成人| 久久综合狠狠综合久久激情| 亚洲欧美综合另类在线卡通| 伊人一区二区三区| 蜜芽一区二区三区| 99精品视频中文字幕| 日韩一卡二卡三卡四卡| 国产精品午夜在线| 日韩av成人高清| 91猫先生在线| 久久这里只精品最新地址| 亚洲精品你懂的| 国产不卡视频在线播放| 欧美男女性生活在线直播观看| 国产亚洲人成网站| 日韩电影在线一区二区| www.亚洲精品| 精品国产sm最大网站免费看| 一区二区三区毛片| 成人av在线一区二区三区| 欧美成人综合网站| 亚洲一区视频在线观看视频| 高清国产一区二区| 日韩精品一区二|