當前位置:首頁 » 操作系統 » 數據結構演算法與應用語言描述

數據結構演算法與應用語言描述

發布時間: 2023-05-11 22:29:34

❶ 數據結構與演算法分析 —— C 語言描述:開放定址法

分離鏈接散列演算法的缺點是需要指針,由於給新單元分配地址需要時間,因此這就導致演算法的速度多少有些緩慢,同時演算法實際上還要求實現另一種數據結構。除使用鏈表解決沖突外,開放定址散列法(open addressing hashing)是另外一種用鏈表解決沖突的方法。在開放定址散列演算法系統中,如果有沖突發生,那麼就要嘗試選擇另外的單元,直到找出空的單元為止。更一般地,單元 相繼試選,其中 ,且 。函數 F 是沖突解決方法,因為所有的數據都要置入表內,所以開放定址散列法所需要的表要比分離鏈接散列用的表大。一般說來,對開放定址散列演算法來說,裝填因子應該低於 。開放定址散列法有三種常用的沖突解決辦法:

在線性探測法中,函數 F 是 的線性函數,典型的情形是 。這相當於逐個探測每個單元(必要時可以繞回)以查找出一個空空單元。即插入一個第一個沖突關鍵字,它將被放入下一個空閑地址,即地址 0,該地址是開放的。之後插入的沖突關鍵字,會對表進行試選,只要表足夠大,總能夠找到一個自由單元,但是如此花費的時間是相當多的。更糟的是,即使表相對較空,這樣占據的單元也會開始形成一些區塊,其結果稱為一次聚集(primary clustering),於是,散列到區塊中的任何關鍵字都需要多次試選單元才能解決沖突,然後該關鍵字被添加到相應的區塊中。

可以證明,使用線性探測的預期探測次數對於插入和不成功的查找來說大約為 ,而對於成功的查找來說則是 。略加思考不難得出,成功查找應該比不成功查找平均花費較少的時間。

如果聚算不算是問題,那麼對應的公式就不難得到。我們假設有一個很大的表,並設每次探測都與前面的探測無關。對於隨機沖突解決辦法而言,這些假設是成立的,並且當 不是非常接近 1 時也是合理的。首先,我們導出在一次不成功查找中探測的期望次數,而這正是直到我們找到一個空單元的探測次數。由於空單元所佔的份額為 ,因此我們預計要探測的單元數是 。一次成功查找的探測次數等於該特定元素插入時所需要的探測次數。當一個元素被插入時,可以看成是一次不成功查找的結果。因此,我們可以使用一次不成功查找的開銷來計算一次成功查找的平均開銷。

需要指出, 在 0 到當前值之間的變化,因此早期的插入操作開銷較少,從而降低平均開銷。我可以通過使用積分計算插入時間平均值的方法來估計平均值,如此得到

這些公式顯然優於線性探測相應的公式,聚集不僅是理論上的問題,而且實際上也發生在具體的實現中。線性探測的預計探測次數與 呈正比,即 越小,插入操作平均次數越少。

平方探測是消除線性探測中一次聚集問題的沖突解決辦法。平方探測就是沖突函數為二次函數的探測方法。流行的選擇是 。

對於線性探測,讓元素幾乎填滿散列表並不是個好主意,因為此時表的性能會降低。對於平方探測情況甚至更糟:一旦表被填滿超過一半,當表的大小不是素數時甚至在表被填滿超過一半之前,就不能保證一次找到一個空單元了。這是因為最多有一半的表可以用作解決沖突的備選位置。

定理:如果使用平方探測,且表的大小是素數,那麼當表至少有一半是空的時候,總能夠插入一個新的元素。

哪怕表有比一半多一個的位置被填滿,那麼插入都有可能失敗(雖然這是非常難以見到的,但是把它記住很重要。)。另外,表的大小是素數也非常重要,如果表的大小不是素數,則備選單元的個數可能會銳減。

在開放定址散列表中,標準的刪除操作不能施行,因為相應的單元可能已經引起過沖突,元素繞過它存在了別處。例如,如果我們刪除一個沖突的中間元素,那麼實際上所有其他的 Find 常式都將不能正確運行。因此,開放定址散列表需要懶惰刪除,雖然在這種情況下並不存在真正意義上的懶惰。

開放定址散列表的類型聲明如下,這里,我們不用鏈表數組,而是使用散列表項單元的數組,與在分離鏈接散列中一樣,這些單元也是動態分配地址的。

初始化開放定址散列表的常式如下,由分配空間(第1~10行)及其後將每個單元的 Info 域設置為 Empty 組成。

使用平方探測散列法的 Find 常式如下。如果分裂鏈接散列法一樣, 將返回 Key 在散列表中的位置。如果 Key 不出現,那麼 Find 將返回最後的單元。該單元就是當需要時,Key 將被插入的地方。此外,因為被標記了 Empty,所以表達 Find 失敗很容易。為了方便起見,我們假設散列表的大小至少為表中元素個數的兩倍,因此平方探測方法總能夠實現。否則,我們就要在第 4 行前測試 。在下面的常式中,標記為刪除的那些元素被認為還在表內,這可能引起一些問題,因為該表可能提前過滿。

第 4~6 行為進行平方探測的快速方法。由平方解決函數的定義可知, ,因此,下一個要探測的單元可以用乘以 2(實際上就是進行一位二進制移位)並減 1 來確定。如果新的定位越過數組,那麼可以通過減去 TableSize 把它拉回到數組范圍內。這比通常的方法要快,因為它避免了看似需要的乘法和除法。注意一條重要的警告:第 3 行的測試順序很重要,切勿改變它。

下面的常式是插入。正如分離鏈接散列方法那樣,若 Key 已經存在,則我們就什麼也不做。其他工作只是簡單的修改。否則,我們就把要插入的元素放在 Find 常式指出的地方。

雖然平方探測排除了一次聚集,但是散列到同一位置上的那些元素將探測相同的備選單元。這叫做二次聚集(secondary clustering)。二次聚集是理論上的一個小缺憾,模擬結果指出,對每次查找,它一般要引起另外的少於一半的探測。

雙散列(double hashing)能夠解決平方探測中的二次聚集問題,不過也需要花費另外的一些乘法和除法形銷。對於雙散列,一種流行的選擇是 。這個公式是說,我們將第二個散列函數應用到 X 並在距離 , 等處探測。 選擇的不好將會是災難性的。

在雙散列時,保證表的帶下為素數是非常重要的。假設我們在插入一個關鍵字的時候,發現它已經引發沖突,就會選擇備選位置,如果表的大小不是素數,那麼備選單元就很有可能提前用完。然後,如果雙散列正確實現,則模擬表明,預期的探測次數幾乎和隨機沖突解決方法的情形相同。這使得雙散列理論上很有吸引力,不過,平方探測不需要使用第二個散列函數,從而在實踐中可能更簡單並且更快。

❷ 數據結構與演算法分析 —— C 語言描述:二叉樹

二叉樹(binary tree)是一棵樹,其中每個節點的兒子都不能多於兩個。

二叉樹的一個性質是平均二叉樹的深度要比 N 小的多,這個性質有時很重要。分析表明,這個平均深度為 ,而對於特殊類型的二叉樹,即二叉查找樹(binary search tree)。其深度的平均值是 。不幸的是,在最壞情況下,這個深度可以大到 N-1 的。

因為一棵二叉樹最多有兩個兒子,所以我們可以用指針直接指向它們。樹節點的聲明在結構上類似於雙鏈表的聲明,在聲明中,一個節點就是由 key(關鍵字)信息加上兩個指向其他節點的指針(Left 和 Right)組成的結構。

應用於鏈表上的許多法則也可以應用到樹上。特別地,當進行一次插入時,必須調用 malloc 創建一個節點。節點可以在調用 free 刪除後釋放。

我們可以用在畫鏈表時常用的矩形框畫出二叉樹,但是,樹一般畫成圓圈並用一些直線連接起來,因為二叉樹實際上就是圖(graph)。當涉及樹時,我們也不顯示地畫出 NULL 指針,因為具有 N 個節點的每一棵二叉樹都將需要 N+1 個 NULL 指針。

二叉樹有許多與搜索無關的重要應用。二叉樹的主要用處之一是在編譯器的設計領域。

上圖就是一個表達式樹(expression tree)。表達式樹的樹葉是操作樹(operand),比如常數或者變數,而其他的節點為操作符(operator)。由於這里所有的操作都是二元的,因此這棵特定的樹正好是二叉樹,雖然這是最簡單的情況,但是節點含有的兒子還是有可能多於兩個的。一個節點也有可能只有一個兒子,如果有一目減算符(unary minus operator)的情形。可以將通過遞歸計算左子樹和右子樹所得到的值應用在根處的算符操作中而算出表達式樹 T 的值。上面里的例子中,左子樹的值是「((3+1) 3)/((9-5)+2)」,右子樹的值是「(3 (7-4)+6)」,因此整棵樹的表達式就是圖上的結果。

我們可以通過遞歸產生一個帶括弧的左表達式,然後列印出在根處的運算符,最後再遞歸地產生一個帶括弧的右表達式而得到一個(對兩個括弧整體進行計算的)中綴表達式(infix expression)。這種一般的方法(左,節點,右)稱為中序遍歷(inorder traversal);由於其產生的表達式類型,這種遍歷很容易記憶。

另一個遍歷策略是遞歸列印出左子樹、右子樹,然後列印運算符。如果我們應用這種策略於上面的樹,則輸出將是「31+3 95-2+/743- 6+-」。這種遍歷策略一般稱為後序遍歷(postorder traversal)。

第三種遍歷策略是先列印出運演算法,然後遞歸地列印出右子樹和左子樹。同樣的,應用這種策略於上面的樹,則輸出將是「-/ ++313-952+ 3-746」,這是一種不太常用前綴(prefix)記法,這種遍歷策略為先序遍歷(preorder traversal)。

這里我們只給出一種演算法,來把後綴表達式轉變成表達式樹。這里的要點是,一次一個符號地讀入表達式。如果符號是操作符,那麼我們就建立一個單節點樹並將一個指向它的指針推入棧中。如果符號是操作符,那麼我們就從棧中彈出指向兩棵樹 和 的那兩個指針( 的先彈出)並形成一棵新的樹,該樹的根就是操作符,它的左、右兒子分別指向 和 。然後將這棵新樹的指針壓入棧中。

❸ 數據結構演算法與應用c++語言描述 答案

a4x
4 + a3x
3 + a2x
2 + a1x + a0 ≡ 0 (mod p2
)

❹ 數據結構與演算法分析 —— C 語言描述:樹的遍歷及應用

樹有很多應用,流行的用法之一是包括 UNIX、VAX/VMS 和 DOS 在內的許多常用操作系統中的目錄結構。

假設我們有一個根目錄 A,A 目錄下有一個目錄 B,B 目錄下有一個目錄 C,C 目錄下有一個文件 D。此時,文件 D 的全路徑名就為 A/B/C/D,其中,每一個 「/」 後的每一個 「/」在樹中都表示一山配山條邊,這個分級文件系統非常流行,因為它能夠使得用戶邏輯地組織數據。不僅如此,在不同目錄下的兩個文件還可以享有相同的名字,因為他們必然有從根開始的不同的路徑從而具有不同的路徑名。在 UNIX 文件系統中的目錄就是含有它的所有兒子的一個文件。(在 UNIX 文件系統中的每個目錄還有一項指向該目錄本身以及另一項指向該目錄的父目錄。因此,嚴格說來,UNIX 文件系統不是樹,而是類樹(treelike)。)

假設我們想要列出目錄中所文件中所有文件的名字。我們的輸出格式將是:深度為 的文件的名字被 次跳格(tab) 鎖進後列印出來。

演算法的核心為遞歸程序 ListDir。為了顯示根時不進行鎖進,該常式需要從目錄名和深度 0 開始。這里的深度是一個內部薄記變數,而不是主調常式能夠期望知道的那種參數。因此,驅動常式 ListDirectory 用於將遞歸常式和外界連接賣塌起來。

演算法的邏輯簡單易懂。ListDir 的參數是到樹中的某種引用。只要引用合理,則引用涉及的名字在進行適當次數的跳格鎖進後被列印出來。如果是一個目錄,那麼我們遞歸地一個逗中一個地處理它所有的兒子。這些兒子出在一個深度上,因此需要鎖進一段附加的空格。

這種遍歷的策略叫做先序遍歷(preorder traversal)。在先序遍歷中,對節點的處理工作是在它的諸兒子節點被處理之前進行的。當程序運行時,每個父節點恰好最多隻執行一次,因為每個名字只輸出一次。不僅如此,對於每個節點的每一個兒子節點最多隻能執行一次。在遍歷過程中,每個 for 循環終止在 NULL 指針上,但每個節點最多有一個這樣的指針。因此,每個節點總的工作量是常數。如果有 N 個文件名需要輸出,則運行時間就是 O(N)。

另一種遍歷樹的方法是後序遍歷(postorder traversal)。在後序遍歷中,在一個節點處的工作是在它的諸兒子節點被計算後進行的。

由於目錄本身也是文件,因此它們也有大小。設我們想要計算被該樹所有文件佔用的磁碟區塊的總數。最自然的做法是找出含有子目錄中的塊的個數。於是,磁碟塊的總數就是子目錄中的塊的總數加上該目錄使用的一個塊。

如果不是一個目錄,那麼 SizeDirectory 只返回所佔用的塊數。否則,將被佔用的塊數與其所有子節點(遞歸地)發現的塊數相加。

❺ 數據結構,演算法與應用 ---C++語言描述(代碼與習題答案)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int status;

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
{
int *elem;
int length;
int listsize;
}sqlist;

int flag=0;
status initlist(sqlist *l)
{
l->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l->elem)exit(OVERFLOW);
l->length=0;
l->listsize=LIST_INIT_SIZE;
return OK;
}
status listinsert(sqlist *l,int i,int e)
{
int *newbase,*q,*p;
if(i<1||i>l->length+1)return ERROR;
if(l->length>=l->listsize)
{
newbase=(int*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
if(newbase)exit(OVERFLOW);
l->elem=newbase;
l->listsize+=LISTINCREMENT;
}
q=&(l->elem[i-1]);
for(p=&(l->elem[l->length-1]);p>=q;--p)
{
*(p+1)=*p;
}
*q=e;
++l->length;
return OK;
}
void listprint(sqlist *l)
{
int i;
for(i=0;i<l->length;i++)
{
printf("%-5d",l->elem[i]);
}
}
status listdelete(sqlist *l,int i,int *e)
{
int *p,*q;
if((i<1)||(i>l->length))return ERROR;
p=&(l->elem[i-1]);
e=*p;
q=l->elem+l->length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--l->length;
return OK;
}
status getelem(sqlist *l,int i,int *e)
{
if((i<1)||(i>l->length))return ERROR;
*e=l->elem[i-1];
return OK;
}
int meun()
{
int a;
printf("*************************\n");
printf("* 1 InitList *\n");
printf("* 2 ListInsert *\n");
printf("* 3 ListPrint *\n");
printf("* 4 Delete *\n");
printf("* 5 Getelem *\n");
printf("* 6 Exit *\n");
printf("*************************\n");
fflush(stdin);
do
{
printf("qing xuan ze:\n");
scanf("%d",&a);
}while(!(a>=1&&a<=6));
return a;
}
void main()
{
sqlist l,*p;
int x,i,e,result;
p=&l;
do
{ clrscr();
x=meun();
switch(x)
{
case 1: initlist(p);
flag=1;
printf("initlist succes!press enter contiue");
getch();
break;
case 2: if(flag==0)
{
printf("you must initlist first!please select!");
getch();
break;
}
fflush(stdin);
printf("\n please input i and e:");
scanf("%d%d",&i,&e);
result=listinsert(p,i,e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("insert completed!please enter continue");
getch();
break;
case 3: printf("sqlist:\n");
listprint(p);
getch();
break;
case 4: printf("\n please input i:");
scanf("%d",&i);
result=listdelete(p,i,&e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("delete completed!please enter continue");
getch();
break;
case 5: printf("\n please input i:\n");
scanf("%d,&i");
result=getelem(p,i,&e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("completed:%d",e);
getch();
break;
case 6: printf("bye\n");
getch();
exit(0);
}
}while(1);

}

❻ 數據結構與演算法c++語言描述 怎麼樣

本書含橘是關於計算機科學與工程領域的基礎性研究科目之一——數據結構與演算法的專著。 本書在簡亂老鄭要回顧了基本的C++ 程序設計概念的基礎上,全面系統地介紹了隊列嘩頌、堆棧、樹、圖等基本數據結構,以及貪婪演算法、分而治之演算法、分枝定界演算法等多種演算法設計方法,為數據結構與演算法的繼續學習和研究奠定了一個堅實的基礎。
​更為可貴的是,本書不僅僅介紹了理論知識,還提供了50多個應用實例及600多道練習題。 本書內容廣博權威,結構清晰合理,是一本全新的有關數據結構與演算法的教材,對於計算機科學與工程領域的從業人員也是一本很好的參考書。

❼ c++語言編程題兩題,希望高手幫解答一下,謝謝!

第一題緩粗:

#include<iostream>
#include<cstring>

usingnamespacestd;

classString
{

friendostream&operator<<(ostream&output,String&a);
friendintmain();

private:
intsize;
char*str;
public:
String(char*a);
};

String::String(char*a)
{
str=a;
size=strlen(a);
}

ostream&operator<<(ostream&output,String&a)
{
叢燃inti;
intn=a.size;
for(i=0;i<n;i++){
output<<a.str[i];
}
returnoutput;
}

intmain()
{
char*a="Helloworld!";
cout<<a<<endl;
Strings=String(a);
cout<<s;
cin.get();
return0;
}

❽ 數據結構與演算法分析:C語言描述的目錄

第1章 引論1.1 本書討論的內容1.2 數學知識復習1.2.1 指數1.2.2 對數1.2.3 級數1.2.4 模運算1. 2.5 證明方法1.3 遞歸簡論總結練習參考文獻第2章 演算法分析2.1 數學基礎2.2 模型2.3 要分析的問題2.4 運行時間計算2.4.1 一個簡單的例子2.4.2 一般法則2.4.3 最大子序列和問題的解.2.4.4 運行時間中的對數2.4.5 檢驗你的分析2.4.6 分析結果的准確性總結練習參考文獻第3章 表、棧和隊列3.1 抽象數據類型(adt)3.2 表adt3.2.1 表的簡單數組實現3.2.2 鏈表3.2.3 程序設計細節3.2.4 常見的錯誤3.2.5 雙鏈表3.2.6 循環鏈表3.2.7 例子3.2.8 鏈表的游標實現3.3 棧adt3.3.1 棧模型3.3.2 棧的實現3.3.3 應用3.4 隊列adt3.4.1 隊列模型3.4.2 隊列的數組實現3.4.3 隊列的應用總結練習第4章 樹4.1 預備知識4.1.1 樹的實現4.1.2 樹的遍歷及應用4.2 二叉樹4.2.1 實現4.2.2 表達式樹4.3 查找樹adt--二叉查找樹4.3.1 makeempty4.3.2 find4.3.3 findmin和findmax4.3.4 insert4.3.5 delere4.3.6 平均情形分析4.4 avl樹4.4.1 單旋轉4.4.2 雙旋轉4.5 伸展樹4.5.1 一個簡單的想法4.5.2 展開4.6 樹的遍歷4.7 b-樹總結練習參考文獻第5章 散列5.1 一般想法5.2 散列函數5.3 分離鏈接法5.4 開放定址法5.4.1 線性探測法5.4.2 平方探測法5.4.3 雙散列5.5 再散列5.6 可擴散列總結練習參考文獻第6章 優先隊列(堆)6.1 模型6.2 一些簡單的實現6.3 二叉堆6.3.1 結構性質6.3.2 堆序性質6.3.3 基本的堆操作6.3.4 其他的堆操作6.4 優先隊列的應用6.4.1 選擇問題6.4.2 事件模擬6.5 d-堆6.6 左式堆6.6.1 左式堆的性質6.6.2 左式堆的操作6.7 斜堆6.8 二項隊列6.8.1 二項隊列結構6.8.2 二項隊列操作6.8.3 二項隊列的實現總結練習參考文獻第7章 排序7.1 預備知識7.2 插入排序7.2.1 演算法7.2.2 插入排序的分析7.3 一些簡單排序演算法的下界7. 4 希爾排序7.4.1 希爾排序的最壞情形分析7.5 堆排序7.5.1 堆排序的分析7.6 歸並排序7.6.1 歸並排序的分析7.7 快速排序7.7.1 選取樞紐元7.7.2 分割策略7.7.3 小數組7.7.4 實際的快速排序常式7.7.5 快速排序的分析7.7.6 選擇的線性期望時間演算法7.8 大型結構的排序7.9 排序的一般下界7.9.1 決策樹7.10 桶式排序7.11 外部排序7.11.1 為什麼需要新的演算法7.11.2 外部排序模型7.11.3 簡單演算法7.11.4 多路合並7.11.5 多相合並7.11.6 替換選擇總結練習參考文獻第8章 不相交集adt8.1 等價關系8.2 動態等價性問題8.3 基本數據結構8.4 靈巧求並演算法8.5 路徑壓縮8.6 按秩求並和路徑壓縮的最壞情形8.6.1 union/find演算法分析8.7 一個應用總結練習參考文獻第9章 圖論演算法9.1 若干定義9.1.1 圖的表示9.2 拓撲排序9.3 最短路徑演算法9.3.1 無權最短路徑9.3.2 dijkstra演算法9.3.3 具有負邊值的圖9.3.4 無圈圖9.3.5 所有點對最短路徑9.4 網路流問題9.4.1 一個簡單的最大流演算法9.5 最小生成樹9.5.1 prim演算法9.5.2 kruskal演算法9.6 深度優先搜索的應用9.6.1 無向圖9.6.2 雙連通性9.6.3 歐拉迴路9.6.4 有向圖9.6.5 查找強分支9.7 np-完全性介紹9.7.1 難與易9.7.2 np類9.7.3 np-完全問題總結練習參考文獻第10章 演算法設計技巧10.1 貪婪演算法10.1.1 一個簡單的調度問題10.1.2 huffman編碼10.1.3 近似裝箱問題10.2 分治演算法10.2.1 分治演算法的運行時間10.2.2 最近點問題10.2.3 選擇問題10.2.4 一些運算問題的理論改進10.3 動態規劃10.3.1 用一個表代替遞歸10.3.2 矩陣乘法的順序安排10.3.3 最優二叉查找樹10.3.4 所有點對最短路徑10.4 隨機化演算法10.4.1 隨機數發生器10.4.2 跳躍表10.4.3 素性測試10.5 回溯演算法10.5.1 收費公路重建問題10.5.2 博弈總結練習參考文獻第11章 攤還分析11.1 一個無關的智力問題11.2 二項隊列11.3 斜堆11.4 斐波那契堆11.4.1 切除左式堆中的節點11.4.2 二項隊列的懶惰合並11.4.3 斐波那契堆操作11.4.4 時間界的證明11. 5 伸展樹總結練習參考文獻第12章 高級數據結構及其實現12.1 自頂向下伸展樹12.2 紅黑樹12.2.1 自底向上插入12.2.2 自頂向下紅黑樹12.2.3 自頂向下刪除12.3 確定性跳躍表12.4 aa-樹12.5 treap樹12.6 k-d樹12.7 配對堆總結練習參考文獻索引

❾ 《數據結構與演算法分析C語言描述》真的適合初學者嗎

數據結構課程一般都是在大學大一第二學期進行開設,從基礎上來說至少需要兩項

  1. 計算機基礎知識(學會正常使用電腦)

  2. 一門計算機語言(這本書是C語言的,所以應該學會C語言)

整體來說是適合初學者學習的,但是這個初學者的空間想像能力和邏輯思維能力不能太弱。因此最好要有一定的數學基礎,例如有一定的高數和線性數學基礎,能夠理解一般的圖形,矩陣,階乘等數學概念。

❿ 關於計算機網路方面的書籍

1. 計算機網路常識書籍
計算機網路常識書籍 1.計算機網路入門需要看那些書籍
1)編碼:隱匿在計算機軟硬體背後的語言,此書從信息的編碼,數字的不同進製表示,到計算機採用的二進制機器級表示開始,到用電路構建一個簡單的加法器,觸發器,計數器,存儲器,甚至一個具有控制器,運算器,存儲器的簡易CPU,娓娓道來,真是醍醐灌頂。最後還談到了圖形界面的原理。此書作者更是被傳為聖經的《Windows程序設計》的作者Charles Petzold。讀完此書可對計算機硬體的原理與設計有一全面深入之認識,猶如身處群山之巔,一覽無余。

2)深入理解計算機系統 上一本《編碼》通俗易懂,即使沒有計算機相關知識也能懂,但缺乏一些計算機機制的介紹。此書是國外著名的介紹計算機系統方面的書,從程序員的角度帶你暢游計算機系統架構。涉及程序的機器級表示(機器碼,匯編),處理器體系結構,存儲器結構,系統IO,網路編程,並發編程,以及程序性能的優化。讀完此書可對計算機系統,程序設計有一深層次了解。

3)就C語言而言,K&R的 C程序設計語言 的無疑是最好的參考書,不過對初學者來說還是有一定難度,輔以諸如 C和指針 ,C陷阱與缺陷 會有更好的效果。當然多寫程序才是王道,多寫才能發現問題,加深認識。

4)Debug Hacks 此書介紹GDB調試工具及調試技巧,本人現在主要就是使用gcc gdb啦。此書助你更好的找出臭蟲。

6)數據結構與演算法分析 介紹演算法和數據結構的書籍很多,但本人就是用這本書學習的,所以推薦。此書的前3章和第7章就介紹了題主要求的一些數據結構和演算法,後面幾張介紹樹,排序,圖論演算法,及一些高級數據結構。讀完此書將助你設計更優美的程序。
2.計算機網路經典書籍
《tcpip詳解》分三卷,國外經典計算機教材,有中文譯版,不過不適合你的。

《計算機網路》也分很多種,如果你要考網工的話或者你想學習網路推薦你看以下的書籍:

網路工程教程(第二版) 雷震甲 主遍 清華大學出版 (這本太深了,不過內容全)網工指定教材

網路工程必讀系列 王達 這套書我看了兩遍,實在不錯。。。

計算機網路第五版 謝希仁 主遍 謝希仁同時還出了很多書都關於TCP/IP的書籍,具體書名我忘記,我覺得他講解得思路清晰,易理解,適合基礎旅岩差的。

計算檔散機網路第四版,這是國外經典計算機網路經典教程,作者都是英文名字(具體我忘記了) ,我以前我學時很喜歡看這本。
3.計算機網路方面有哪些書籍值得推薦
計算機網路第五版,謝希仁的,個人感覺是國內最好的初級書籍。

如果想對網路有個清晰、全面的認識,可以閱讀下面三本書籍: 第一本就是潘愛民翻譯的Andrew S.Tanenbaum的《計算機網路》,此書講明白了網路之道,即計算機網路通信的主要原理; 第二本是W.Richard Stevens的《TCP/IP詳解卷一:協議》,此書講明白了網路之術,即TCP/IP協行鎮氏議簇的工作過程; 第三本是Douglas E.er的《計算機網路與網際網路》,此書嘗試在更廣泛意義上解答「計算機網路和網際網路是如何工作的」這一基本問題,解釋了協議是如何使用硬體和應用是如何使用協議來滿足用戶的需求。
4.有關計算機編程,網路基礎知識的書籍
建議你從C語言開始學,學好了它以後學其他語言會很容易上手

推薦你先看譚浩強的《C語言程序設計》先,這是一部非常好的C語言書籍,慢慢來學習程序設計是一個非常漫長的過程,不要著急,一本書多看兩遍三遍,學會交叉學習法,在學習C的過程中,可以看看數據結構,編譯原理,操作系統等書籍,對編成都是很有幫助的。最開始學習的時候,先不要編一些比較大的程序,多編一些小程序,比如數組運算,字元組合等等,指針是C語言的精華,是比較復雜的部分。如果指針這部分都可以熟練的應用,那麼C語言里你還有什麼不明白的嗎,我相信你,你一定能學習好C語言的。

可以按照C——C++——JAVA的順序學習,C++的學習是很有難度的,類,標准庫,多態,繼承等等比較抽象難道懂的概念,雖然他秉承了C語言的風格,但是有很多很多是C語言不具備的,要多看書,上機實踐也是必不可少的。《C++編程思想》,《C++標准庫》,這些書都非常好,內容也很全面,常式書籍也是必不可少的,多看源代碼對編程是很有幫助的,也會少走很多彎路。總之,C++的學習是一個比較漫長的過程,大概需要兩年的時間,這只是底限,如果想學通,學精,還需要更多的時間。

我向你推薦一些C++經典書籍:

c++程序設計教程

c++編程思想

c++大學教程

c++程序設計語言

數據結構演算法與應用c++語言描述

c++標准模板庫------自修教程與參考手冊

泛型編程與STL

深度探索c++對象模型

設計模式---可復用面向對象軟體的基礎

重構---改善既有代碼的設計

Essential c++

Effective c++

More Effctive c++

C++ primer

前五本應該屬於入門書籍,後面的屬於學習難度比較大的,想提高C++的編程能力,看看這些書籍有好處。建議你把編程思想這本書多看看。多做練習題,對提高編程水平的幫助是很大的。

其實語言是相通的,一門語言學會了,學習其他語言就比較容易了。

業界有這樣一種說法,因為JAVA這門語言包含了C++的一些特性,掌握了C++,就等於掌握了JAVA的80%,

在掌握了C++之後(我說的掌握指的是,可以熟練用C++編程序了,並沒有要求你完全掌握C++的所有部分,沒有人能達到這一點,因為C++太龐大了,如果能堅持不懈的學習C++兩年到三年的時間了,你就可以學習其他的語言了)可以試著學習一些其他的語言,如JAVA,VC++等等比較復雜的語言.

這時候可以說你已經對程序設計語言有個大體的認識了,可以明確自己學習的方向,根據自己的學習情況而定,是學習一些自己比較感興趣的語言啊(從興趣出發),還是為了找工作啊,開始進行更深入的學習.比如學習windows下的框架編程和編程等等比較復雜的語言.

如果是為了找工作的話你一定學好C,C++,JAVA三門語言.

在我國目前的軟體開發行業中,C,C++,JAVA的需求量是非常大的.

好了,說了這么多,可以參考一下,為自己做個學習計劃,要對自己有信心,最後祝你在學習編程的道路上走的更好更遠,祝你學有所成!!
5.計算機網路技術的推薦書籍
如果想對網路有個清晰、全面的認識,可以閱讀三本書籍:

第一本就是潘愛民翻譯的Andrew S.Tanenbaum的《計算機網路》,此書講明白了網路之道,即計算機網路通信的主要原理;

第二本是W.Richard Stevens的《TCP/IP詳解卷一:協議》,此書講明白了網路之術,即TCP/IP協議簇的工作過程;

第三本是Douglas E.er的《計算機網路與網際網路》,此書嘗試在更廣泛意義上解答「計算機網路和網際網路是如何工作的」這一基本問題,解釋了協議是如何使用硬體和應用是如何使用協議來滿足用戶的需求。
6.推薦計算機基礎知識學習的書籍
1、《計算機基礎(第二版)》——姜岩、王秀玲

本書介紹了信息與計算機的基礎知識、Windows XP操作系統的基本操作和基本使用知識、Word

2003文字處理軟體的基本知識、Excel 2003電子表格處理軟體的基本知識和PowerPoint 2003文檔

演示軟體等知識做了簡單的介紹。

2、《計算機應用基礎》 ——劉錫軒、丁恆、侯曉音

本書是為非計算機專業類學生提供計算機一般應用所必需的基礎知識、能力和素質的課程。本書滿

足普通高等院校培養「應用型人才」的教學宗旨,內容豐富,與時俱進,實用性強。

3、《計算機應用基礎》——楊飛宇,孫海波

本書主要介紹了計算機組裝與維護、計算機網路技術、電子文檔製作、電子報表製作和演示文稿制

作。

4、《計算機應用基礎》——張 明、王 翠、張和偉

本書採用任務驅動的方式進行編寫,內容強調操作性和實用性。全書涵蓋計算機基礎知識、

Windows XP操作系統、Word 2003文字處理軟體、Excel 2003電子表格處理軟體和PowerPoint

2003演示文稿製作軟體等內容。

5、《深入理解計算機系統》————布賴恩特

本書主要介紹了計算機系統的基本概念,包括最底層的內存中的數據表示、流水線指令的構成、虛

擬存儲器、編譯系統、動態載入庫,以及用戶應用等。書中提供了大量實際操作,可以幫助讀者更

好地理解程序執行的方式,改進程序的執行效率。

6、《計算機應用基礎》——武馬群

本書主要介紹了計算機基礎知識、操作系統Windows XP、網際網路(Inter)應用、文字處理軟體

Word 2003應用、電子表格處理軟體Excel 2003應用、多媒體軟體應用、演示文稿軟PowerPoint

2003應用等內容。

熱點內容
安卓微信淺色模式怎麼恢復 發布:2025-05-16 06:27:53 瀏覽:239
美嘉演算法口訣 發布:2025-05-16 06:03:15 瀏覽:952
c程序編譯連接 發布:2025-05-16 06:02:36 瀏覽:964
腳本魔獸 發布:2025-05-16 06:01:52 瀏覽:330
文件夾python 發布:2025-05-16 06:01:43 瀏覽:627
電腦我的世界伺服器游戲幣 發布:2025-05-16 05:27:25 瀏覽:489
索尼手機為什麼不能用安卓10 發布:2025-05-16 05:18:46 瀏覽:784
蔚來es6選擇哪些配置實用 發布:2025-05-16 05:18:05 瀏覽:130
小米如何掃碼wifi密碼 發布:2025-05-16 05:13:38 瀏覽:807
樓層密碼是什麼意思 發布:2025-05-16 05:13:37 瀏覽:13