當前位置:首頁 » 操作系統 » 後續演算法

後續演算法

發布時間: 2022-03-31 05:42:29

A. 請分別對順序表和單鏈表寫出求線性表中下標為i的(第i+1個)元素的前驅和後續的演算法

順序表:前驅a[i-1],後繼a[i+1]
線性表:p=head;
int j=0;
while(j!=i)
{
j++;
p=p->next ;
}
前驅p->data,後繼p->next->next->data

B. 二叉數的前序、中序、後續三種方式的遞歸與非遞歸的演算法。

小哥分這么少
=============tree.cpp=============
#include<iostream>
#include<queue>
#include<stack>
#include<fstream>
using namespace std;

#include"tree.h"

//構造二叉樹
template<class T>
bool bitree<T>::insert(const T& e)
{
btnode<T>* anew=new btnode<T>(e);
_insert(anew, this->root);
count++;
return true;
}

template<class T>
void bitree<T>::_insert(btnode<T> *anew, btnode<T>* &node)
{

if(NULL== node)
{
node=anew;
return;
}
if(anew->data < node->data)
_insert(anew, node->left);
if(anew->data > node->data)
_insert(anew, node->right);
}

//前序遍歷遞歸和非遞歸版本
template<class T>
void bitree<T>::preorder( void(*visit)(btnode<T>*u) )
{
_preorder(visit, this->root);
}
template<class T>
void bitree<T>::_preorder(void(*visit)(btnode<T>*u), btnode<T> *node)
{
if( NULL == node) return;
visit(node);
_preorder(visit, node->left);
_preorder(visit, node->right);
}
//前序遍歷的非遞歸版本,用stack實現
template<class T>
void bitree<T>::preorder_nr(void (*visit)(btnode<T>*u))
{
if(NULL==this->root) return;
btnode<T> *tempnode;
stack<btnode<T>*> astack;
astack.push(this->root);
while(!astack.empty())
{
tempnode=astack.top();
visit(tempnode);
astack.pop();
if(tempnode->right !=NULL) astack.push(tempnode->right);
if(tempnode->left !=NULL) astack.push(tempnode->left);

}
}
//後序遍歷
template<class T>
void bitree<T>::postorder( void(*visit)(btnode<T>*u) )
{
_postorder(visit, this->root);
}
template<class T>
void bitree<T>::_postorder(void(*visit)(btnode<T>*u), btnode<T> *node)
{
if( NULL == node) return;
_postorder(visit, node->left);
_postorder(visit, node->right);
visit(node);
}

//中序遍歷
template<class T>
void bitree<T>::inorder( void(*visit)(btnode<T>*u) )
{
_inorder(visit, this->root);
}
template<class T>
void bitree<T>::_inorder(void(*visit)(btnode<T>*u), btnode<T> *node)
{
if( NULL == node) return;
_inorder(visit, node->left);
visit(node);
_inorder(visit, node->right);
}
//層次遍歷
template<class T>
void bitree<T>::levelorder(void (*visit)(btnode<T>*u))
{
queue<btnode<T> * > aqueue;
_levelorder(visit, this->root, aqueue);
}

template<class T>
void bitree<T>::_levelorder(void (*visit)(btnode<T>*u), btnode<T> *node, queue<btnode<T> *>& aqueue)
{
if(NULL == node) return;
btnode<T>* tempnode;
aqueue.push(node);
while(! aqueue.empty() )
{
tempnode=aqueue.front();
visit(tempnode);
if(tempnode->left != NULL )aqueue.push(tempnode->left);
if(tempnode->right !=NULL) aqueue.push(tempnode->right);
aqueue.pop();
}
}

//樹的高度
template<class T>
int bitree<T>::height()const
{
return _height(root);
}

template<class T>
int bitree<T>::_height(btnode<T>*root)
{
if( NULL == root) return 0;
int hl=_height(root->left);
int hr=_height(root->right);
if(hl > hr) return ++hl;
else return ++hr;
}

//樹的節點數
template<class T>
int bitree<T>::size()
{
return count;
}

void visit(btnode<int> *root)
{
cout<<root->data<<" ";
}

int main()
{
//
cout<<endl<<endl;
bitree<int> atree;
cout<<" 請在aaa.txt中 輸入你要排序的數組 ,沒有aaa.txt則創建之"<<endl;
fstream fin("aaa.txt");
if(!fin)
{
cout<<"cannot open aaa.txt"<<endl;
return 1;
}

int input;
while(fin>>input)
{
cout<<" insert "<<input<<endl;
atree.insert(input);
}

cout<<endl<<endl;
cout<<"前序遍歷:";
atree.preorder(visit);
cout<<endl<<endl;

cout<<"前序遍歷(非遞歸) ";
atree.preorder_nr(visit);
cout<<endl<<endl;

cout<<"後序遍歷:";
atree.postorder(visit);
cout<<endl<<endl;

cout<<"中序遍歷:";
atree.inorder(visit);
cout<<endl<<endl;

cout<<"層次遍歷:";
atree.levelorder(visit);
cout<<endl<<endl;
return 1;
}

==============tree.h==========

//二叉樹的實現

#include<iostream>
using namespace std;
//二叉樹的節點
template<class T>
class btnode
{
public:
btnode()
{
left=right=0;
}

btnode(const T & data)
{
left=right=0;
this->data=data;
}

btnode(const T &data, btnode<T> *l, btnode<T> *r)
{
this->data=data;
left=l;
right=r;
}
btnode<T> *left,*right;
T data;
};

//二叉樹
template<class T>
class bitree
{
public:
//構造函數
bitree(){root=0;count=0;}
//構造二叉樹
bool insert(const T& e);
//判空運算
bool isempty()
{
return 0==root?true:false;
}
//前序遍歷遞歸和非遞歸版本
void preorder( void(*visit)(btnode<T>*u) );
void preorder_nr( void(*visit)(btnode<T>*u));
//後序遍歷
void postorder(void(*visit)(btnode<T> *u));
//中序遍歷
void inorder(void(*visit)(btnode<T>*u));
//層次遍歷
void levelorder(void (*visit)(btnode<T>*u));
//樹的高度
int height()const;
//樹的節點數
int size();
//刪除運算
private:
int count;
btnode<T> *root;//root
void _insert(btnode<T> *anew, btnode<T>* &node);
void _preorder(void(*visit)(btnode<T>*u), btnode<T> *root);
void _postorder(void(*visit)(btnode<T>*u), btnode<T> *root);
void _inorder(void(*visit)(btnode<T>*u), btnode<T> *root);
void _levelorder(void (*visit)(btnode<T>*u), btnode<T> *node,queue<btnode<T>* >&);
int _height(btnode<T>*root);

btnode<T>* _deepsearch(const T&data, btnode<T>*& node);
btnode<T>* _breadsearch(const T&data, btnode<T>*& node);

};

C. 學習java的後續問題...

學習Java最主要的就是多上機練,最好做到每天能練2-3個小時。這裡面的語法很簡單,主要的是要會靈活運用,要掌握一些常用的演算法,至於用什麼軟體,我推薦你使用MyEclipse.

MyEclipse企業級工作平台(MyEclipse Enterprise Workbench ,簡稱MyEclipse)是對Eclipse IDE的擴展,利用它我們可以在資料庫和J2EE的開發、發布,以及應用程序伺服器的整合方面極大的提高工作效率。它是功能豐富的J2EE集成開發環境,包括了完備的編碼、調試、測試和發布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。
在結構上,MyEclipse的特徵可以被分為7類:
1. J2EE模型
2. WEB開發工具
3. EJB開發工具
4. 應用程序伺服器的連接器
5. J2EE項目部署服務
6. 資料庫服務
7. MyEclipse整合幫助
對於以上每一種功能上的類別,在Eclipse中都有相應的功能部件,並通過一系列的插件來實現它們。MyEclipse結構上的這種模塊化,可以讓我們在不影響其他模塊的情況下,對任一模塊進行單獨的擴展和升級。
簡單而言,MyEclipse是Eclipse的插件,也是一款功能強大的J2EE集成開發環境,支持代碼編寫、配置、測試以及除錯。

windows集成版本下載地址:
http://downloads.myeclipseide.com/downloads/procts/eworkbench/7.0/myeclipse-7.0-win32.exe

D. 後續治療費的計算方法

單純的後續治療醫學建議並不能解決具體賠償數額問題。後續治療費的計算是個非常復雜的醫學和法律問題,涉及多種因素。在司法實踐中,法院認定後續治療費用的方法各不相同,主要分為以下幾種:
1. 按既往已發生費用的平均數計算。這是一種最為簡單的計算方法。但是因為疾病發展階段不同、住院治療與否等因素影響,這種計算方法也存在非科學性,對於被告醫院可能存在不公平,而且在某些特定案例中對原告也可能不公平。
2. 委託司法鑒定機構進行治療費用評估。
3. 根據醫療機構的診斷證明或醫生建議進行計算。
4. 其他計算方法。
基本醫療費用對於基本醫療費用,在實踐中,可以參照疾病的常規治療和護理標准進行計算。例如,腫瘤病人化療葯物的選擇應按國內普通化療葯物的價格進行計算,而不應按照進口同類葯品計算。

E. lpr利率後續演算法

剛買了房子,LPR是國家強制執行的利率,一般銀行都會在這個基礎上加幾個點,以保證自已貸款的收益,至於加幾個點,每個地方的每個銀行都不一樣,一般地方銀行加的點會比大銀行少。你實付的利率就是lpr加點後的利率

F. 固定資產後續支出計算方法

固定資產後續支出分為可資本化的後續支出和費用化的後續支出。新《企業會計准則》規定,固定資產發生的可資本化後續支出時,可能涉及到替換原固定資產的某組成部分,當發生的後續支出符合固定資產確認條件的,應將其計入固定資產成本,同時將被替換部分的賬面價值扣除,也就是說:如果固定資產的後續支出能增強固定資產獲取...未來經濟利益的能力,能提高固定資產使用效能,能延長固定資產使用壽命,能使產品質量有實質性提高或者能使產品成本有實質性的降低,能使可能流入企業的經濟利益超過原先的估計,在不導致計入後固定資產賬面價值超過其可回收的金額前提下,應將其後續支出予以資本化。其會計核算是:當固定資產發生可資本化的後續支出時,應將該固定資產的原價、以計提的累計折舊和減值准備轉銷,將其固定資產賬面價值(凈值)轉入「在建工程」。發生的固定資產可資本化的後續支出通過「在建工程」科目核算,追加該項工程成本,在固定資產的後續支出完工並達到預定可使用狀態時,應將後續支出資本化後的固定資產賬面價值在不超過其可收回金額的范圍內從「在建工程」科目轉入固定資產;費用化的後續支出一般指企業固定資產投入使用後,由於磨損,可能導致各組成部分局部損壞等,為使固定資產正常運轉和使用,發揮其使用效能進行必要的維護,它並不能使固定資產性能改變和產生經濟利益,對不符合固定資產確認條件的,在發生時直接計入「當期損益」。你是說固定資產沒有給出使用年限的話,你可以 問一下你的領導,共同商討一下它的使用年限。

G. 求普通樹的非遞歸後續遍歷演算法

可以給node加上額外的狀態信息嗎?
如果可以的話,給node設定狀態status,0為第一次進棧,1為已展開。
節點第一次進棧的時候,status設為0。在節點出棧的時候,如果status為0,則將status改為1,先將此節點進棧,再將其子節點進棧;如果status為1,說明其子節點已全部訪問,即可訪問該節點。

//////////////////////////////////////

那麼,可以添加一個保存子節點數目的棧n,在孩子進棧之前將父節點再次進棧,同時將子節點數目進棧n,每次訪問一個節點後將棧n頂的數字減1。當棧n頂的數字為0時,即可訪問該節點,同時將n頂元素出棧。

//////////////////////////////////////
這和前序遍歷不一樣啊,你把子節點序列入棧的時候,就已經丟失了一部分樹的結構信息,這時候如果不添加額外的信息,似乎不能把子節點序列和之前的節點區分開。從入棧時機和訪問數據的時機方面我認為是不能做到後續遍歷的。
我記得在學校的時候,老師教的非遞歸後續遍歷的標准演算法就是我前面說的第一種。而且,只增加一個最大長度只有樹深度的int 型棧開銷也不是很大阿。
////////////////////////////////////////
node = root;
stack.push(root);
while(!stack.isEmpty()){
node = stack.pop();
if (node 是葉結點){
//訪問代碼,stack_num棧頂元素減一
while(stack.top()==0){
stack.pop(node1)
//訪問node1
stack_num.pop();
//stack_num棧頂減一
}
continue;
}
childs = node.getChilds();
stack.push(node);
for(int i=childs.length-1;i>=0;i--){
stack.push(childs[i]);
}
stack_num.push(childs.length);
}

H. C計算後續日期的演算法設計思路,文字敘述即可,

使用儒略日

I. 求p所指結點的中序後繼演算法

q=p->right;
while(q->left) q=q->left;
return q

J. 給出後序線索二叉樹中求後序後繼節點的演算法代碼!!!要代碼!不要分析!


熱點內容
狂三腳本 發布:2024-11-15 17:31:38 瀏覽:871
附近存儲櫃 發布:2024-11-15 17:15:17 瀏覽:451
王選解決漢字存儲問題 發布:2024-11-15 17:15:11 瀏覽:659
球球大作戰安卓為什麼不能玩哪些模式 發布:2024-11-15 17:14:26 瀏覽:995
存儲器講課 發布:2024-11-15 17:14:12 瀏覽:195
安卓充電頭怎麼稱呼 發布:2024-11-15 17:11:17 瀏覽:445
獵人手游源碼 發布:2024-11-15 17:09:28 瀏覽:432
qt資源圖片編譯 發布:2024-11-15 16:59:26 瀏覽:665
編譯選項保護范圍最廣 發布:2024-11-15 16:57:47 瀏覽:605
c語言中的除號 發布:2024-11-15 16:51:09 瀏覽:215