1. 數據結構中的兩棧共享空間有點不理解求解!
這個應該是以一個數組實現兩個棧的共享。
-----------------------------------------------
| | | | | | | | | | | 長度為10的數組
------------------------------------------------
top1(-1) top2(10)
如上圖,假設初始top1為-1,top2為11,棧1push了一個數字2,棧2push了一個數字3之後,數組變成如下形式,top1為0,top2為9:
-----------------------------------------------
| 2 | | | | | | | | | 3 |
-----------------------------------------------
top1(0) top2(9)
當整個數組存滿的時候top1+1=top2。比如棧1存了2、5、4、6、7,棧2存了3、9、4、8、1,此時top1=4,top2=5
----------------------------------------------------
| 2 | 5 | 4 | 6 | 7 | 1 | 8 | 4 | 9 | 3 |
----------------------------------------------------
top1(4) top2(5)
2. 若棧採用順序存儲方式存儲,現兩棧共享空間
暈.這么簡單的問題也拿出來問
1 2 3 .m
| |
那麼當他們滿的時候,兩個指針相鄰
那就是
top[1]+1=top[2]
top[1]在top[2]左邊相鄰了
3. 設兩個棧(stack1,stack2)共享一個一維數組空間s[m],它們的棧底分別設在數組的兩端,試編寫一個演算法,
我們的想法是很簡單的根在0的位置,後來假設的當前位置,然後我的左子節點2I +1,+2 2I右子節點。如根的左子節點的右子節點。左子節點,右子節點。定義一個空值沒有子節點,如空。
假設交界處的三名成員:值,左,右
假定數組是全球性的,如果不是作為一個參數。
遞歸的實現是相對簡單的:
無效btree2array(節點,指標)
{
??(節點?== NULL)
????陣列[索引] =空;
?數組[索引] =節點值;
??btree2array(節點左,指數* 2 + 1);
??btree2array(節點 - >指數* 2 + 2);
}
開頭的呼叫句子:
btree2array(根,0);
此外,虛擬機,超低價團購
?
4. 兩棧共享一個存儲空間,判定棧滿的條件是什麼
應該是top[1]=top[2] 吧,因為兩個棧頂都對到一起了才能說明棧的存儲已達到極限了,我是這么理解的。
5. 2個域名2個網站共用一個空間的方法
很多空間支持多域名綁定,但是不支持子目錄綁定,可以考慮如下幾種方法來實現一個空間放多個域名站點的方法,只是其他站點都需要在一個目錄下大開。
方法一:用js跳轉
在空間上分別綁定www.aaa.com和www.bbb.com
把www.aaa.com網站文件傳到根目錄,把www.bbb.com網站傳到./bbb/目錄
把下面的代碼保存為domain.js,然後上傳到空間根目錄
javaScript代碼
switch(location.host){
case'www.bbb.com':
location.href="http://www.boaer.com/bbb/"
break;
}
往空間根目錄的首頁的<head>與</head>之間加入
<scriptlanguage='javascript'src="/bbb/domain.js"></script>
當輸入www.aaa.com訪問時看不到任何變化,但是當輸入www.bbb.com訪問時,瀏覽器自動跳轉到www.bbb.com/bbb/。
這樣便實現了同一個空間安裝2個網站了,要實現多個網站可以依此類推。或者直接在頭部添加類似如下代碼:
<scriptlanguage=javascript>
if(document.domain=='www.boaer.com')
this.location="www.bbb.com"+this.location.pathname+this.location.search;
</script>
方法二:(推薦)
用server.Transfer("")來實現一個空間多個站的方法
先將所有的域名綁定到您的虛擬主機上,然後將虛擬主機根目錄中的index.asp(首頁文件)里加入下列代碼就可以了:ASP/Visual Basic代碼
<%
sn=lcase(Request.ServerVariables("SERVER_NAME"))'用於獲取用戶是通過哪個域名訪問的,並轉換成小寫
ifsn="www.abc.net"orsn="abc.net"thenserver.Transfer("default1.asp")
ifsn="www.def.net"orsn="def.net"thenserver.Transfer("index.html")
%>
效果:如果輸入的域名是www.abc.net或abc.net的話,就訪問default1.asp頁面,如果是用def.net或www.def.net的話就調用index.html文件。
網上還有一些教程是用response.redirect來實現轉向,但在這里建議使用server.Transfer("")來實現這個功能,好處有以下幾個方面:
不會出現頁面跳轉,直接輸入網址後,網址後不會帶任何文件,訪問者不會看出你的兩個網站是放在同一虛擬主機上。
server.Transfer("")不會阻擋搜索引擎對你的網站的收錄,而response.redirect可不一定。
方法三:(最方便管理,一個空間放的站越多越推薦)
方法是利用一個asp文件通過瀏覽器輸入的域名,判定是要打開那個文件夾里的站點,來實現一個虛擬放置多個站點(缺點例如打開abc.com,在瀏覽器中看到的是abc.com/b因為站點在b目錄下)
其他說明:如果虛擬主機不支持子目錄綁定,這是非常有效的辦法
實現方法如下 :先建立一個默認主頁index.asp
然後把A站放在A文件夾下,B站放在B文件夾下,C站放在C文件夾下。
index.asp網頁文件如下 :
ASP/Visual Basic代碼
<%ifRequest.ServerVariables("SERVER_NAME")="www.a.com"then
response.redirect"a/index.asp"
elseifRequest.ServerVariables("SERVER_NAME")="www.b.com"then
response.redirect"b/index.asp"
elseifRequest.ServerVariables("SERVER_NAME")="www.c.com"then
response.redirect"c/index.asp"
else
response.redirect"aaa/index.asp"
endif%>
代碼作用說明:
如果用戶訪問 www.a.com 程序跳轉至 空間目錄下 a/index.asp
如果用戶訪問 www.b.com 程序跳轉至 空間目錄下 b/index.asp
如果用戶訪問 www.c.com 程序跳轉至 空間目錄下 c/index.asp
如果用戶訪問 沒有指定的 程序跳轉至 空間目錄下 aaa/index.asp
怎麼樣,簡單吧。
elseif Request.ServerVariables("SERVER_NAME")="www.b.com " then
response.redirect "b/index.asp"
這段是可以無限復制的,一個虛擬主機放幾百個站點就是自己設置的了只要把域名都綁定在虛擬主機上,然後設置這個域名所綁定的站點就OK了,這種要看虛擬主機能綁多少個玉米。能綁100個的話就能放100個站,並且利於網站管理,這樣做可以根據文件夾名,就知道這個是哪個站。
php空間的方法
利用PHP是可以實現這個功能的。不但讓他運行多個網站,而且還可以實現每個網站獨立域名。下面把詳細的步驟說明一下。首先了解一下$_SERVER['HTTP_HOST']變數。這個變數在PHP中是用來取瀏覽器中所輸入的地址的。可以實現上面的功能了
先把你需要的兩個域名解析到空間。比如:www.***com和www.***.cn兩個域名。如果有更多的域名也沒關系。方法是一樣的。
把默認文檔設置為index.php,當然空間需要是支持PHP的哦。:)
3、利用if ... else 來判斷來訪地址,並作出分析。代碼如下:
<?if($_SERVER['HTTP_HOST']=="www.123.com";){?>
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=http://www.123.com/main">
<?}else if($_SERVER['HTTP_HOST']=="mycalf.com"){?>
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=http://123.com/main">
<?}else if($_SERVER['HTTP_HOST']=="www.456.cn";){?>
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=http://www.456.cn/home">
<?}else{?>
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=http://www.456cn/home">
<?}?>
4、完成
這里要說明的一點是,有的時候域名是用大寫的,那麼就需要對$_SERVER['HTTP_HOST']這個變數進行處理,來讓他把所有的字元轉換成小寫。
代碼如下:
<?
$querystring = preg_replace(array("/()/","/_/"),array("","-"),$_SERVER["QUERY_STRING]);
$I = strtolower(trim($_SERVER['HTTP_HOST']));
?>
如果是這樣寫,就需要把上面的<?if($_SERVER['HTTP_HOST']=="www.123.com";){?>這句變為<?if($I=="www.123.com";){?>,這樣就可以在輸入網址是大寫的時候,也可以正常訪問了。
這個方法也有一個不足點,就是需要在域名後面跟一個目錄名。但是如果你不怕亂的話,也可以把兩個網站都放到根目錄下。但是推薦是每個網站一個目錄。現在許多空間商,都支持5個以內的域名的解析。這樣就可以買一個空間,擁有5個網站了。
這個辦法的優勢也是有的,他每個域名都是可以訪問其他網站的,比如輸http://www.123.com/home/與訪問http://www.123.cn/域名得到的效果是一樣的。
其實空間麻煩的是資料庫問題,不過資料庫也是可以多個網站共享一個資料庫的,只要不讓表名一樣就可以了。訪問起來道理差不多。OK。
(二)、PHP跳轉代碼實現一個網站空間綁定多個域名,建立多個網站
先建立一個默認主頁index.php,然後把A站放在A文件夾下,B站放在B文件夾下,C站放在C文件夾下,index.php網頁文件如下
<?php
switch ($_SERVER["HTTP_HOST"])
{
case "www.a.com":
header("location:a/index.php");
break;
case "www.b.com":
header("location:b/index.php");
break;
case "www.boaer.com":
header("location:cboaer/index.php");
break;
}
?>
如果訪問 www.a.com程序跳轉至 空間目錄下 a/index.php
如果訪問 www.b.com程序跳轉至 空間目錄下 b/index.php
如果訪問 www.boaer.com程序跳轉至 空間目錄下 boaer/index.php
利用一個php文件通過瀏覽器輸入的域名,判定他是要打開那個文件夾里的站點,來實現一個虛擬放置多個站點(缺點例如打開abc.com,在瀏覽器中看到的是abc.com/b因為站點在b目錄下)
其他說明:如果虛擬主機不支持子目錄綁定,這是唯一有效的辦法
JS版本
<script>try {if( self.location == "http://玉米一/" ) {
top.location.href = "http://玉米一/目錄";
}
else if( self.location == "http://玉米二/" ) {
top.location.href = "http://玉米二/目錄";
}
else if( self.location == "http://玉米三/" ) {
top.location.href = "http://玉米三/目錄";
}
else if( self.location == "http://玉米四/" ) {
top.location.href = "http://玉米四/目錄";
}
else {document.write ("錯誤的訪問地址")}} catch(e){}</script>
利用Javascript語言
echo "<scriptlanguage='javascript'>";
echo " location='網址';";
echo "</script>";
用javascript定時刷新頁面
<script type="text/javascript">
setInterval("window.location.href=window.location.href;",5000);
</script>
window.location.Reload()應該是刷新.(如果有數據提交的話,會提示是否提交的(是和否選項))
window.location.href=window.location.href;
最好不要用location.reload(),而用 location=location比較好,還有在模式窗口(showModalDialog和 showModelessDialog)前者不能用。
X秒自動跳轉
header("refresh:3;url=http://www.163.com");
print('正在載入,請稍等...<br>三秒後自動跳轉~~~');
<p>{MsgInfo}正在跳轉,請稍後......</p>
<p>如果沒有自動跳轉,請點<ahref="{JumpUrl}"><strong>這里</strong></a>繼續!</p& gt;
<META HTTP-EQUIV="refresh" CONTENT='{JumpDelay};URL={JumpUrl}'>
<script language="javascript">
function Jump()
{
window.location = '{JumpUrl}';
}
document.onload = setTimeout("Jump()" , {JumpDelay} * 1000);
</script>
類goto.php跳轉使用方法簡析
看下演示
http://www.a.com/goto.php?url=http://www.b.com/
可以直接跳到b網站,但是又不算外鏈。
使用方法是個goto.php文件,傳到ftp空間根目錄,把www.a.com改成你的域名,後面b的改成外鏈地址就可以了
把下面的存為goto.php
<? $url=$_GET["url"];header("Location:".$url);?>
更換永久鏈接
如鏈接是:mcooo.com_a.com
在頭部加上以下代碼讓他自動跳轉到a.com正確的鏈接地址上,
<?php
if(strripos($_SERVER['REQUEST_URI'],"_"))
{
$url="http://.com/".substr($_SERVER['REQUEST_URI'],strripos($_SERVER['REQUEST_URI'],"_")+1);
header('Location: '.$url);
}
?>
6. 兩個棧共享一段內存區域是什麼意思
當程序中同時使用兩個棧時,可以將兩個棧的棧底設在向量空間的兩端,讓兩個棧各自向中間延伸。如下圖所示:
當一個棧的元素較多,超過向量空間的一半時,只要另一個棧的元素不多,那麼前者就可以佔用後者的部分存儲空間。
只有當整個向量空間被兩個棧占滿(即兩個棧頂相遇)時,才會發生上溢,因此兩個棧共享一個長度為m的向量空間
7. c++兩個棧共享一個數組空間演算法
#include<iostream>
using namespace std;
template<typename Comparable>
class DoubleStack
{
public:
DoubleStack( int m = 10 ) : max( m )
{
V = new Comparable[ max ];
leftTop = -1;
rightTop = max;
}
//..true means ok, and false means the stack is full
bool push( int i, Comparable x )
{
if ( i == 0 )
{
if( leftTop < rightTop - 1 )
{
V[ ++ leftTop ] = x;
return true;
}
else
return false;
}
else
{
if ( rightTop > leftTop + 1 )
{
V[ -- rightTop ] = x;
return true;
}
else
return false;
}
}
//..you'd better check if the stack is empty before using the function
Comparable pop( int i )
{
if ( i == 0 )
return V[ leftTop -- ];
else
return V[ rightTop ++ ];
}
bool isEmpty( int i ) {
if ( i == 0 )
return leftTop == -1;
else
return rightTop == max;
}
bool isFull( int i )
{
if ( i == 0 )
return leftTop + 1 == rightTop;
else
return rightTop - 1 == leftTop;
}
~DoubleStack() { delete V; }
private:
Comparable *V;
int max;
int leftTop;
int rightTop;
};
int main()
{
DoubleStack<int> s;
int x, i;
while( cin >> x >> i && x != -1 )
{
s.push( i, x );
if ( s.isEmpty( i ) )
cout << "empty" << endl;
else if ( s.isFull( i ) )
cout << "full" << endl;
}
while( !s.isEmpty( 0 ) )
cout << s.pop( 0 ) << ' ';
cout << endl;
while( !s.isEmpty( 1 ) )
cout << s.pop( 1 ) << ' ';
cout << endl;
return 0;
}
/*
1 0
2 0
3 0
4 0
5 0
6 1
7 1
8 1
9 1
10 1
-1 0
*/
8. 設有兩個棧s1和s2共享存儲空間c[1,m0],其中一個棧底設在c[1]處,另一個棧底設在c[m0]處,分別編寫s1和s2的
void push(x,i)
int x,i;
{
if (top1==top2-1)
printf(「overflow!\n」)
else if (i==1)
{top 1++;c[top1]=x;
}
else
}
top2--;c[top2]=x;
}
9. 兩棧共享一個存儲空間,判定棧滿的條件是什麼
肯定是top[1]+1=top[2]啊,你想要是top[1]=top[2]那麼,兩個棧頂在同一個位置,等於一個位置存了兩個元素,說明你前一步插入的元素沒有空間了,就是1和2相鄰的時候已經滿了。