例2-1 利用兩個線性表LA和LB分別表示兩個集合A和B,現(xiàn)要求一個新的集合A=A∪B。
void union(List &La,List Lb) {
La-len=listlength(La);
Lb-len=listlength(Lb);
for(I=1;Igetelem(lb,I,e);
if(!locateelem(la,e,equal))listinsert(la,++la-en,e)
}
}
算法2.2
例2-2 巳知線性表LA和線性表LB中的數(shù)據(jù)元素按值非遞減有序排列,現(xiàn)要求將LA和LB歸并為一個新的線性表LC,且LC中的元素仍按值非遞減有序排列。
此問題的算法如下:
void mergelist(list la,list lb,list &lc)
initlist(lc);
I=j=1;k=0;
la-len=listlength(la);
lb-len=listlength(lb);
while((I
getelem(la,I,ai);getelem(lb,j,bj);
if(aielse{listinsert(lc,++k,bj);++j;}
}
while(Igetelem((la,I++,ai);listinsert(lc,++k,ai);
}
while(jgetelem((lb,j++,bj);listinsert(lc,++k,bi);
}
}
順序棧的類型定義如下:
# define StackSize 100
typedef char datatype;
typedef struct {
datatype data[stacksize];
int top;
}seqstack;
設S是SeqStack類型的指針變量。若棧底位置在向量的低端,即s–>data[0]是棧底元素,那么棧頂指針s–>top是正向增加的,即進棧時需將s–>top加1,退棧時需將s–>top 減1。因此,s–>toptop =stacksize-1表示棧滿。當棧滿時再做進棧運算必定產(chǎn)生空間溢出,簡稱“上溢”;當??諘r再做退棧運算也將產(chǎn)生溢出,簡稱“下溢”。上溢是一種出錯狀態(tài),應該設法避免之;下溢則可能是正?,F(xiàn)象,因為棧在程序中使用時,其初態(tài)或終態(tài)都是空棧,所以下溢常常用來作為程序控制轉(zhuǎn)移的條件。
3、判斷棧滿
int stackfull(seqstack *s)
{
return(s–>top==stacksize-1);
}
4、進棧
void push(seqstack *s,datatype x)
{
if (stackfull(s))
error(“stack overflow”);
s–>data[++s–>top]=x;
}
1、置空棧
void initstack(seqstack *s)
{
s–>top=-1;
}
2、判斷棧空
int stackempty(seqstack *s)
{
return(s–>top==-1);
}
5、退棧
datatype pop(seqstack *s)
{
if(stackempty(s))
error(“stack underflow”);
x=s–>data[top];
s–>top--;
return(x)
//return(s–>data[s–>top--]);
}
6、取棧頂元素
Datatype stacktop(seqstack *s)
{
if(stackempty(s)
error(“stack is enpty”);
return s–>data[s–>top];
}
很顯然你首先需要會一門編程語言。數(shù)據(jù)結(jié)構(gòu)可以在不同的語言下實現(xiàn),你可以看常用的數(shù)據(jù)結(jié)構(gòu)教材,有的基于C,有的基于JAVA,所以在學習數(shù)據(jù)結(jié)構(gòu)與算法之前,先學會一門語言是很有必要的事情。
因為數(shù)據(jù)結(jié)構(gòu)書中很多內(nèi)容用到的都是C語言偽代碼,如果不懂C語言的話應該是看不懂的。多了解一下點C語言、數(shù)據(jù)類型、循環(huán)分支、結(jié)構(gòu)體、指針等基本知識。一般來說,學習完c語言之后,效率會比較高點,另外數(shù)學好的話對理解算法是有好處的,動態(tài)規(guī)劃啊,決策樹啊之類的,具體的知識可以去小碼哥李明杰了解。
因為數(shù)據(jù)結(jié)構(gòu)是需要編程實現(xiàn)的。在內(nèi)容上,數(shù)據(jù)結(jié)構(gòu)很大一部分是獨立的,但也有一部分與其它課程有關(guān),比如離散數(shù)學,線性代數(shù)等,不過也沒多大影響,書上都帶有詳細介紹。數(shù)據(jù)結(jié)構(gòu)理論性很強,需要多動手寫代碼,理解好原理,而且會編程實現(xiàn),這兩方面都很重要。
有時間的話肯定是深入學習一下比較好,不過也不要有壓力,大學的東西都是“平易近人”的,只要你認真學肯定是沒問題的,頂多就是比基礎好的人多花點時間。
數(shù)據(jù)結(jié)構(gòu)的話跟C語言還有點關(guān)系,但是大部分人對數(shù)據(jù)結(jié)構(gòu)都不會很了解,所以基本可以認為你們處于同一起跑線。
算法的話重要的是你的邏輯思維能力和數(shù)學功底,C語言只是實現(xiàn)算法的工具,只要算法理解透了,你可以用C++,可以用Java,甚至腳本語言Python,如果C語言基礎好,只會使你實現(xiàn)算法的時候更加順手,但算法的實現(xiàn)本不是算法學習的精髓,算法本身及邏輯能力的提高才是你需要重點關(guān)注的。
個人認為這已經(jīng)是一本非常不錯的教材了,看來你是C/C++的學習不是很深入,要注重程序編寫的規(guī)范化,克服隨意的缺點。
(1)非常重要。 這幾乎就是本門課程的關(guān)鍵所在,也是實際解決問題的基本方法 (2)幾乎和學沒學過離散數(shù)學無關(guān),而在于個人的邏輯思維能力、抽象思維能力(關(guān)鍵)和空間想像能力,而不是什么小聰明和歪門邪道,對解決問題不能有先入為主的直觀解決想法,盡量閱讀算法,領(lǐng)會精神,最好實際上機實現(xiàn),對學習會有很大幫助 (3)算法基于C++語言,當然實際上機還有必要改進和豐富,但是基本已是最優(yōu)化算法了,//后面是C++的注釋方式,要不要隨你便,書中只是為了便于教學理解 (4)算法著眼于解決過程的描述,是一種利用語言進行代替?zhèn)未a描述問題的方式,實際上機再依據(jù)需要補充定義變量 (5)Elemtype是最基本的數(shù)據(jù)類型,為了算法的通用這么使用,實際中依據(jù)需要進行,比如應用為 int,則應該補充 typedef int ElemType; 將其定義為 int 類型,這個參看 typedef 語句的用途 SElemType在書中是棧節(jié)點數(shù)據(jù)類型,也是依據(jù)需要再自己定義,類似的書中都只是通用性描述 相應教材還有一本習題和解答,可以去找找看 這本教材只是基本知識入門級別,后續(xù)可以根據(jù)自己的情況選擇深入學習的資料 。
1. 數(shù)據(jù)結(jié)構(gòu)中最基本的,棧(先進后出),隊列(先進先出),二叉樹,要知道二叉樹的遍歷,這個每年都考。
2.數(shù)據(jù)庫中的基礎知識,考一兩道,主要是關(guān)系數(shù)據(jù)庫的概念,什么m對n,DBMS之類的。
3.軟件設計里的基礎知識,什么高耦合什么的,具體什么忘了,你查查。
4.記得還考那些http,ftp,郵件協(xié)議SMTP、POP3這些,好像每年都有著一道,你看看,很簡單,幾下就好了。
目前能想到的就這些了,希望對你有幫助。
哦,填空題前5到跟選擇題的前10道考的是一樣的知識點,所以上面的這些知識點對前5到填空題同樣有用~~~~~~~~~~~~~
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:2.647秒