① 數據結構與演算法,老師的題目難做啊,求高人解答。
4
3
2
1
,
1
2
3
4,
2
3
4
1,
3
4
2
1,
2
1
3
4,
2
1
4
3,
3
2
1
4,
3
2
4
1,
2
4
3
1,
1
4
3
2
,
1
3
2
4,
1
3
4
2
1
2
4
3
#define
N
4
int
m=0,a=0,b=N;/*m表示種數,a表示棧中元素個數,b表示外面還有需要進棧的個數*/
main()
{
inS(a,b);/*首先入棧*/
printf("%d",m);
getch();
}
int
inS(int
a,int
b)/*入棧*/
{
a++;b--;/*入棧棧中元素+1,棧外元素-1
*/
if(b>0)/*若棧外有元素,可以入棧*/
inS(a,b);
if(a>0)/*若棧中有元素,可以出棧*/
outS(a,b);
}
int
outS(int
a,int
b)/*出棧*/
{
a--;/*出棧棧中元素-1*/
if(a==0&&b==0)/*若棧中元素和棧外元素都為0個*/
{
m++;/*則此種情況的序列滿足條件,種數+1*/
return;
}
if(b>0)
inS(a,b);
if(a>0)
outS(a,b);
}
② 數據結構與演算法一開始怎麼學啊,感覺跟不上老師的節奏
李明傑老師:每周一道演算法題 通關演算法面試課(超清視頻)網路網盤
鏈接: https://pan..com/s/14GZpVf03Mf9E-YnMrrR4Pw
若資源有問題歡迎追問~
③ 如何學習數據結構與演算法 現在學得有些頭大了, 代碼能看懂,但是重新寫不了。
我覺得親自動手寫程序驗證一下數據結構書中的演算法體會最深刻,雖然我也在學數據結構
上周涉及一個字元串包含的問題,翻到KMP演算法,雖然還沒徹底搞懂,不過和譚浩強的書放在一起學,很有感覺,我也是學C不久哈
我認為C語言程序設計講得都是基礎,數據結構講得時演算法,演算法是核心,程序編多了,還是演算法問題
④ 數據結構與演算法考試 急急急
第一題:typedef struct node { elemtype data; elemtype code; struct node *next; }Lnode; 第二題,因為高效率的演算法對要查找的序列要求高,如二分查找要求查找序列有序,低效率的查找對查找的序列要求很低,甚至沒有要求。第三問:折半查找的演算法思想是將數列按有序化(遞增或遞減)排列,查找過程中採用跳躍式方式查找,即先以有序數列的中點位置為比較對象,如果要找的元素值小於該中點元素,則將待查序列縮小為左半部分,否則為右半部分。通過一次比較,將查找區間縮小一半。 折半查找是一種高效的查找方法。它可以明顯減少比較次數,提高查找效率。但是,折半查找的先決條件是查找表中的數據元素必須有序第四問 :二次探查法的探查序列是: hi=(h(key)+i*i)%m 0≤i≤m-1 //即di=i2 即探查序列為d=h(key),d+12,d+22,…,等。該方法的缺陷是不易探查到整個散列空間。
⑤ 學數據結構和演算法之前要先學什麼
學習演算法和數據結構就是把你的程序運行速度變得更快,內存需求變得更小,代碼長度變得更短。正式進入數據結構和演算法前需要了解下C++內存的那些事。
在C++中,內存分成5個區,他們分別是堆、棧、自由存儲區、全局/靜態存儲區和常量存儲區。
棧,在執行函數時,函數內局部變數的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,效率很高,但是分配的內存容量有限;
堆,就是那些由new分配的內存塊,它們的釋放編譯器不去管,由我們的應用程序去控制,一般一個new就要對應一個delete。如果程序員沒有釋放掉,那麼在程序結束後,操作系統會自動回收;
自由存儲區,就是那些由malloc等分配的內存塊,它和堆是十分相似的,不過它是用free來結束自己的生命的;
全局/靜態存儲區,全局變數和靜態變數被分配到同一塊內存中,在以前的C語言中,全局變數又分為初始化的和未初始化的,在C++裡面沒有這個區分了,他們共同佔用同一塊內存區;
常量存儲區,這是一塊比較特殊的存儲區,它們裡面存放的是常量,不允許修改。
以上內容摘自《C++內存管理技術內幕》,學習數據結構和演算法前可以多多看一下。
⑥ 887數據結構與演算法分析怎麼復習
關於復習,這里給你一些思路:
復習效率:
可以學習掌握速讀記憶的能力,提高學習復習效率。速讀記憶是一種高效的學習、復習方法,其訓練原理就在於激活「腦、眼」潛能,培養形成眼腦直映式的閱讀、學習方式。速讀記憶的練習參考《精英特全腦速讀記憶訓練》,用軟體練習,每天一個多小時,一個月的時間,可以把閱讀速度提高5、6倍,記憶力、理解力等也會得到相應的提高,最終提高學習、復習效率,取得好成績。如果你的閱讀、學習效率低的話,可以好好的去練習一下。
復習方法:
1、章節復習,不管是那門學科都分為大的章節和小的課時,一般當講完一個章節的所有課時就會把整個章節串起來在系統的講一遍,作為復習,我們同樣可以這么做,因為既然是一個章節的知識,所有的課時之前一定有聯系,因此我們可以找出它們的共同之處,採用聯系記憶法把這些零碎的知識通過線串起來,更方便我們記憶。
2、糾錯整理:考試的過程中難免會做錯題目,不管你是粗心或者就是不會,都要習慣性的把這些錯題收集起來,每個科目都建立一個獨立的錯題集,當我們進行考前復習的時候,它們是重點復習對象,因此你既然錯過一次,保不準會錯第二次,只有這樣你才不會在同樣的問題上再次失分。
3、思維導圖復習:思維導圖不僅在記憶上可以讓你大腦里的資料系統化、圖像化,還可以幫助你思維分析問題,統籌規劃。將知識用思維導圖畫出來進行整理記憶,可以很快分析出知識的脈絡和重點,並且記得牢固。
⑦ 緊急!!數據結構與演算法的問題。高手進~!!
上邊都是發牢騷的 哎 還是請看我的代碼吧 給分就行
bool InitList();
//初始化順序表
int ListLength() const;
//返回表的長度
bool ListInsert_Sq(int i, ElemType e);
//在i之前插入e表為空時不能插入
void ListAdd(ElemType e);
//從後邊插入數據e
void PrintAll() const;
//列印表的所有元素
bool GetElem(int i, ElemType &e);
//用e返回第i個元素的值
bool ListEmpty();
//判斷是否為空
bool ListDelete(int i, ElemType &e);
//刪除第i位置的元素 返回e
int LocateElem(ElemType e);
//返回e的位置 如果表空 或沒有相應的元素則返回0
//==========================================================
bool C_LIST::InitList() {
L.elem = new ElemType[10];
if (!L.elem)
return ERROR;
L.length = 0;
L.listsize = 10;
return OK;
}
//==========================================================
int C_LIST::ListLength() const {
return L.length;
}
//==========================================================
bool C_LIST::ListInsert_Sq(int i, ElemType e) {
if (i < 1 || i > L.length)
return ERROR;
if (L.length >= L.listsize) {
//c++ ---realloc===========================
ElemType* ptr = L.elem;
ElemType* tmp = new ElemType[L.listsize + 10];
memcpy(tmp, ptr, L.listsize * sizeof(ElemType));
delete[] ptr;
L.elem = tmp;
//=========================================
L.listsize += 10;
}
ElemType *p, *j;
p = &(L.elem[i - 1]);
for (j = &(L.elem[L.length - 1]); j >= p; j--) {
*(j + 1) = *j;
}
*p = e;
L.length++;
return OK;
}
//==========================================================
void C_LIST::ListAdd(ElemType e) {
if (L.length >= L.listsize) {
//c++ ---realloc===========================
ElemType* ptr = L.elem;
ElemType* tmp = new ElemType[L.listsize + 10];
memcpy(tmp, ptr, L.listsize * sizeof(ElemType));
delete[] ptr;
L.elem = tmp;
//=========================================
L.listsize += 10;
}
L.elem[L.length++] = e;
}
//==========================================================
void C_LIST::PrintAll() const {
if (!L.length) {
cout << "表為空!"<<endl;
} else {
for (int i = 0; i < L.length; i++) {
cout << L.elem[i] << " ";
}
cout << endl;
}
}
//=========================================================
bool C_LIST::GetElem(int i, ElemType &e) {
if (i < 1 || i > L.length) {
return ERROR;
} else {
e = L.elem[i - 1];
return OK;
}
}
//==========================================================
bool C_LIST::ListEmpty() {
if (L.length == 0) {
return true;
} else {
return false;
}
}
//==========================================================
bool C_LIST::ListDelete(int i, ElemType &e) {
if (i < 1 || i > L.length) {
return ERROR;
} else {
e = L.elem[i - 1];
for (ElemType *p = &(L.elem[i]); p <= &(L.elem[L.length - 1]); p++) {
*(p - 1) = *p;
}
L.length--;
return OK;
}
}
//==========================================================
int C_LIST::LocateElem(ElemType e) {
if (L.length == 0) {
return 0;
} else {
for (int i = 0; i < L.length; i++) {
if (L.elem[i] == e) {
return i + 1;
}
}
return 0;
}
}
//==========================================================
void Union(C_LIST &L1,C_LIST L2){
ElemType e;
for(int i=1;i<=L2.ListLength();i++){
L2.GetElem(i,e);
if(!L1.LocateElem(e)){
L1.ListAdd(e);
}
}
}
⑧ 「數據結構與演算法」學完容易忘怎麼辦
忘了也正常,回去再看兩遍,再做做題,就記住了
推薦幾個做題的網站,洛谷,bzoj,poj,h,裡面有很多數據結構與演算法的題目
如果找不到需要的題目,也可以直接網路某數據結構的題目,有些人發博客總結各種類型的題目
⑨ 數據結構與演算法怎麼復習
看課本,一定要理解
⑩ 計算機考研中數據結構演算法設計題如何在短期內提高只要不是完全寫不出來就好,不用完全正確
數據結構和演算法類的題目是考察計算機專業學生的「內力」,需要下功夫來提高。如果想速成,那麼就把書上所有考試的考點自己敲代碼敲兩三遍,應付考研應該沒問題了。