複試上機指南之資料結構二

2021-10-03 21:43:47 字數 3448 閱讀 6081

二叉樹的前、中、後序、層次遍歷

struct tree; 

//先序遍歷

void preorder(tree* root)

coutpreorder(root->leftnode);

preorder(root->rightnode);

return;

}//中序遍歷

void inorder(tree* root)

preorder(root->leftnode);

coutpreorder(root->rightnode);

return;

}//後序遍歷

void postorder(tree* root)

preorder(root->leftnode);

preorder(root->rightnode);

coutreturn;

}//層序遍歷

void levelorder(tree* root)

while(!myqueue.empty())

if(current->rightchild != null)

}}

按照前序、中序、後序給出的字串按照給出的順序建立(以下**)即可,若沒有給出順序,只是乙個字串,按照層次遍歷的順序建立字串。

//給乙個字串,建立乙個二叉樹

tree *build(int& position,string str)

tree* node = new tree;

node->c = a;

node->leftnode = null;

node->rightnode = null;

node->leftnode = build(position,str);

node->rightnode = build(position,str);

return node;

}

根據前序、中序或者後序中序確定乙個二叉樹

struct tree

};//若是給的後序的話,則char a= s1[s1.size()-1],後面一樣;

tree* build(string s1,string s2)

char a=s1[0];

tree* node=new tree(a);//建構函式

int position = s2.find(a);

node->leftnode = build(s1.substr(1,position),s2.substr(0,position));

node->rightnode = build(s1.substr(position+1),s2.substr(position+1));

return node;

}

構建乙個二叉排序樹

struct tree

};//構建二叉排序樹

tree* insert(tree* root,int x,int father)else if(x>root->a)

return root;

}

優先佇列,又稱為優先順序佇列、堆。優先佇列是一種特殊的佇列,除了具有佇列的先入先出,佇列頭出,佇列尾入的結構特點,優先佇列最重要的就是要實現快速得到佇列中優先順序最高的元素,因此,優先佇列有一定的順序特點,這是一種弱序,即佇列頭部的那個元素是優先順序最高的,我們往往以元素值的大小作為優先順序來討論,比如說,數值大的優先順序高,則優先佇列元素會按一定規則的大小順序排列,從而使得在佇列頭部的元素始終保持數值最大(優先順序最高)的特點。總之,優先佇列的目的就是實現將元素入佇列,並快速返回佇列優先順序最高優先順序元素

可以理解為大頂堆、小頂堆,在初始化的時候可以指定按照大或小頂堆排序,不指定的話預設是大頂堆,也就是優先順序高(數值大)的在最前面。

下面是預設初始化和指定初始化的三種方式:

#include//標頭檔案和普通佇列一樣

//大頂堆也就是預設的方式,輸入1 2 3 4 5 6,輸出6

int n,a;

priority_queue,less> p;

cin>>n;

for(int i=0;i>a;

p.push(a);

} cout<,greater> p;

cin>>n;

for(int i=0;i>a;

p.push(a);

} coutcin>>n;

for(int i=0;i>a;

p.push(a);

} cout《在stl中有乙個unordered_map即無序對映,其第層是雜湊表實現的。map是有序對映其底層是紅黑樹實現的,顧有一定的順序;在使用的時候兩者操作是相同的,可以使用map,但是在遇到要求效能特別高的時候,我們可以將map改為unordered_map。

關於map之前介紹stl的時候寫過,這裡記錄一些使用時的技巧。

在map中常用的有find(),用來查詢特定元素,返回值是該元素的迭代器。

輸入n個學生的資訊,進行查詢,我們最直觀想到的時使用結構體,其實這個題沒有對資訊進一步的操作,所以我們可以使用字串來解決,將學號看作key,將字串的資訊作為values,查詢到key時,直接輸出str。

mapstudent;

for(int i=0;i>key;

string answer = student[key];

if(answer == ' ')

cout《在輸入key、values時我們往往通過key尋找values,但是如果題目中要求既可以通過key尋找values,又可以通過values輸出key,我們當然可以通過建立兩個map來實現,但是操作有些繁瑣,其實我們可以直接建立雙向對映同時放在通乙個對映中,具體看**。

mapm;

string s;

int pos = s.find(']');//分界點

string key = s.substr(0,pos+1);//key

string value = s.substr(pos+2);//key空格之後的都是values.

m[key] = value;

m[value] = key;

//查詢輸出

strig ke;

getline(cin,ke);

string answer = m[ke];

if(answer == "")else if(answer[0] == '[')

cout《給乙個以0、1組成的字串,返回每個子串出現的次數。

string str;

cin>>str;

mapm;

for(int i=0;i<=str.size();i++)

}

複試 資料結構

1 陣列和鍊錶的區別?從邏輯結構來看 陣列的儲存長度是固定的,它不能適應資料動態增減的情況。鍊錶與陣列相反,它能夠動態分配儲存空間以適應資料動態增減的情況,並且易於進行插入和刪除操作。從訪問方式來看 陣列在記憶體中是一片連續的儲存空間,可以通過陣列下標對陣列進行隨機訪問,訪問效率較高。鍊錶是連式儲存...

資料結構指南

程式 資料結構 演算法 資料是對客觀事物的符號表示,在電腦科學中是指所有能輸入到計算機中並被電腦程式處理的符號的總稱。資料元素是資料的基本單位,在電腦程式中通常作為乙個整體進行考慮和處理。有時,乙個資料元素可由若干個資料項組成。資料項是資料的不可分割的最小單位。資料物件是性質相同的資料元素的集合,是...

資料結構上機2 1

include include define maxsize 50 typedef char elemtype typedef struct sqlist 尾插法線性表 void initlist sqlist l 初始化線性表 void destroylist sqlist l 銷毀線性表 boo...