當前位置:首頁 » 操作系統 » 程序員實用演算法

程序員實用演算法

發布時間: 2023-01-14 05:26:38

⑴ C++演算法求精,看看誰的演算法最優

(1)分別使用二分插入排序和堆排序兩種演算法實現
(2)統計每種演算法所需時間
(3)前n個節點的信息及時間統計結果寫入到文件中

⑵ 求類似計算器的演算法- - 比如 (2+7)*2 或者 (4-1)/3 解這些字元串 然後算出結果

這是我以前做的額,運行在tc上運行可以,因為atoi()(字元轉數值)是tc的庫函數,在c++6.0上會報錯,其實很簡單,自己都可以編一個。剛開始運行沒有提示,忘記了,輸入表達式回車就行了。基本思想是將中綴表達式利用棧轉成後綴表達式,再求值。
#include<stdio.h>
#define max 100
typedef long datatype;
typedef char chartype;
typedef struct
{
datatype data[max];
int top;
}numstack;/*對象棧用於存儲運算對象*/
typedef struct
{
chartype data[max];
int top,y[max];/*y中存儲對應運算符的優先順序*/
}stack;/*運算符棧用於存儲運算符*/

int fenli(numstack *S,char string[max],int i)
/*將運算對象從表達式中取出轉換為數值並存儲在對象棧中*/
{
int j=0;
char st[100];/*st用於暫時存儲字元類型的運算對象*/
do
{
st[j]=string[i];i++;j++;
}while(string[i]>='0'&&string[i]<='9');/*將運算對象從表達式中取出存儲在st中*/
st[j]='\0';
S->top++;
S->data[S->top]=atoi(st);/*atoi的作用是將字元串轉換為對應的數值,將轉換後的數值存儲在對象棧中*/
j=0;
return(i);/*將當前字元的位置返回*/
}

int pipei(char string[max])
/*驗證括弧是否匹配*/
{
stack *S;
int i=0;
S->top=0;/*初始化運算符棧*/
while(string[i]!='\0')
{
if(string[i]=='(')/*遇到'('將'('入棧*/
{
S->top++;
S->data[S->top]=string[i];
}
if(string[i]==')')/*遇到')',判斷棧頂是否'(',如果是則將棧頂出棧,否則括弧不匹配返回0*/
if(S->data[S->top]=='(')
S->top--;
else return(0);
i++;
}
if(S->top>0) return(0);/*判斷運算符棧是否為空,不為空則括弧不匹配返回0,為空則括弧匹配返回1*/
else return(1);
}
void yunsuan(char string[max])
{
numstack *S;
int i=0;
S->top=0;/*初始化對象棧*/
while(string[i]!='\0')/*如果是結束符,結束循環*/
{
if(string[i]>='0'&&string[i]<='9')/*如果當前字元是運算對象,調用fenli函數將運算對象分離出來,並轉換為對應數值*/
i=fenli(S,string,i);
else
{/*如果是運算符,則將對象棧中棧頂倆個運算對象做對應的運算,將結果壓入對象棧*/
switch(string[i])
{
case ' ':{break;}
case '+':{S->data[S->top-1]+=S->data[S->top];S->top--;break;}
case '-':{S->data[S->top-1]-=S->data[S->top];S->top--;break;}
case '*':{S->data[S->top-1]*=S->data[S->top];S->top--;break;}
case '/':{S->data[S->top-1]/=S->data[S->top];S->top--;break;}

}
i++;/*掃描下一字元*/
}
}
printf("表達式運算結果為: %ld \n",S->data[S->top]);

}
int zhuanghuan(char s[max],char string[max])
/*將中綴表達式轉換為後綴表達式*/
{
stack *S;
int i=0,j=0;
S->top=-1;
S->y[0]=0;/*初始化運算符棧*/
while(s[i]!='\0')/*遇到結束符結束循環*/
{
if(s[i]>='0'&&s[i]<='9')/*遇到運算對象*/
{
string[j]=s[i];/*將運算對象存入轉換後的字元串中*/
j++;
}
else switch(s[i])
{

case '(':{/*遇到'(',直接入運算符棧*/
S->top++;
S->data[S->top]='(';
S->y[S->top]=0;/*'('在括弧內運算優先順序最低,在括弧外最高*/
break;
}
case ')':/*遇到')',將運算符棧的運算符出棧,直到遇到'('為止,將'('直接出棧*/
{
while(S->data[S->top]!='(')
{
string[j]=S->data[S->top];
S->top--;j++;
}
S->top--;break;
}
case '+':
case '-':{
string[j]=' ';/*將運算對像用間隔開*/
if(S->y[S->top]>=1)/*如果棧頂元素的優先順序大於+-的優先順序1,則將棧頂元素出棧*/
{
string[j]=S->data[S->top];
S->top--;
}
S->top++;
S->data[S->top]=s[i];/*將當前運算符+或-入棧*/
S->y[S->top]=1;/*+-的優先順序定義為1*/
j++;break;
}
case '*':
case '/':{ if(s[i]=='/'&&s[i+1]=='0') {printf("除數不能為0\n");return(0);}
string[j]=' ';
if(S->y[S->top]>=2)/*如果棧頂元素的優先順序大於等於*或/的優先順序,則將棧頂元素出棧*/
{
string[j]=S->data[S->top];
S->top--;
}
S->top++;
S->data[S->top]=s[i];/*將當前運算符*或/入棧*/
S->y[S->top]=2;/*優先順序定義為2*/
j++;break;
}

}
i++;
}
while(S->top!=-1)/*若棧不為空,出棧直到棧空*/
{
string[j]=S->data[S->top];S->top--;j++;
}
string[j]='\0';
printf("後綴表達式為:%s\n",string);
return(1);

}
int main()
{

char string[max],s[max],flag='1';
while(flag!='0')
{
printf("");
gets(s);
if(pipei(s))
{
if(zhuanghuan(s,string))
yunsuan(string);
}
else printf("bupipei");
printf("結束輸入0,輸入任意字元繼續");
scanf("%c",&flag);
}
}

⑶ 大學計算機專業java課程學的都有什麼

1、 java語法。
通過任何一本Java入門書籍,都可以學會Java的基本語法。千萬不要認為,你把書上的例子程序都能寫出來就算學會了Java語法。要想真正掌握,還需要做大量的測試題。對語法不準確的理解,會使你寫的代碼出現邏輯錯誤。而這些錯誤會使你在真正的項目開發中吃盡苦頭:你認為正確才會寫上去。而在幾十萬行代碼中找出幾行有邏輯錯誤的代碼,非常困難。因為你幾乎不會懷疑你認為正確的代碼存在錯誤。
2、 常用類。
永遠不要寫別人已經實現的代碼。有很多功能,用JDK中現有的類就可以完成。你需要熟悉JDK.可以通過研究JDK幫助文檔和JDK源代碼的方式,逐漸了解,你需要的類都在什麼地方。一方面,要熟悉有哪些可以直接使用的資源,另一方面,學習一下,SUN公司的工程師怎樣寫代碼。
3、 IDE 集成開發環境。
現在企業最常用的是IBM公司的eclipse ,類似的還有JBuilder 、Idea,NetBeans等等。畢竟,只有5%的頂尖高手在使用簡單的文本編輯器在寫Java代碼。多數程序員都是在使用這些東西。
4、 資料庫
MySql,Oracle,DB2.小項目多數使用MySql這樣的免費資料庫。大一些的項目會考慮使用Oracle或者DB2. Java項目很少使用SqlServer。因此,你還需要學習資料庫方面的一些知識。可以從SQL語言開始。這些資料庫都支持標准SQL.學會基本的SQL,參考具體的資料庫手冊,就可以完成一般的項目開發了。當然,要想使你的程序運行的效率更高,需要更深入的學習。大部分的程序優化,都是從這部分開始的。
5、 JDBC Java資料庫連接。
使用Java程序操作資料庫。這部分非常重要。幾乎所有的企業項目都會用到。
6、 HTML CSS Javascript。
HTML-- 超文本標記語言。
CSS --層疊樣式表。
JavaScript--是一種由Netscape的LiveScript發展而來的腳本語言。
准確的說,這些東西和Java語言本身關系不大。但是,現在的企業項目,以B/S結構的居多。因此,我們的Java程序,會有大量的機會和它們打交道。需要提前准備一下。
7、你需要學習如何使用及管理WEB伺服器,例如tomcat,並且知道如何在其基礎上擴展和維護WEB程序,如何使用它的附加服務,如連接池。
8、 JSP Servlet。
這兩個是初級Java程序員必須掌握的基本技能,是所有B/S結構框架的基礎。相應的,還需要學習EL以及JSTL(StandardTagLibraries)和可以選擇的第三方TagLibraries,以提高表示層的處理能力。
9、企業流行框架 Struts,Spring,Hibernate等。
10、Java設計模式。
有一些特殊的功能,只有按照特定的設計模式才能實現。如果你有了5萬行以上的代碼經驗,可以開始研究一下設計模式。
11、你還要跟上技術發展的步伐,了解在Java項目中使用的新技術。如Ajax等。
還有很多要學習的內容。先介紹這么多吧,自己學習這些內容,估計需要2年左右。如果有個好的指導老師,在培訓學校進行系統學習,則需要4-5個月。
如果選擇培訓,一定要選擇擁有多年JAVA項目開發經驗、測試經驗、及項目管理經驗,採用「教」「練」結合,用真實項目案例進行訓練的教學方式。讓學員掌握實用的技能,在畢業後就有著實戰項目開發經驗,立刻上崗,成為諸多企業搶手的人才。

⑷ 計算機相關專業想學習演算法,需要看哪些書

《演算法與數據結構》,《計算機組成原理,匯編語言》,《數字邏輯》,《編譯原理》,《計算機網路》,《面向對象的程序設計等》。

⑸ 新手如何學習編程

熟悉以下關鍵東西,可以邊學邊做,定期訓練,經常思考,長期積累:

1、語法。

2、基礎理論(數學、數據結構、演算法等)。

3、設計方法(編程原則、設計模式、框架設計等)。

4、庫(核心、基礎、UI、擴展、游戲引擎等)。

5、計算機相關(操作系統、網路、圖形學等)。

6、領域知識(游戲設計、網站設計等)。

7、開發工具(編輯器、IDE、自動部署等)。

8、項目管理(進度管理、分工協作、Bug管理、版本控制等)。

最普遍也是最重要的能力:創造力。努力分析並理解好做什麼以及怎麼做。要知道上面那些東西一開始都是不存在的。

具體方法包括:

1、快速閱讀入門教程和書籍,適合學習語言和基礎庫。比如我學Java讀的《Java編程思想》,練習題做過一點,然後學ActionScript就沒讀過書,只讀過Adobe官方文檔《ActionScript 3.0編程》。

2、閱讀庫的文檔、實例、源碼。比如Flash、Flex開發,熟悉官方API很重要,很多細節要具體使用時才注意到,這時候最好做個筆記,雖然我從沒看過我的筆記。

3、做一個自己感興趣或熟悉的小項目,比如我就以黑白棋游戲作為多個語言的試水項目,一樣的邏輯,便於把關注點放在語言特點上。

4、自己動手豐衣足食。廚師有菜譜,程序員可沒菜譜。比如我做游戲,最關鍵的游戲編程知識全部是動手學出來的,很少有專門針對某個業務領域(如游戲)的編程書籍,要麼是入門書,要麼是模式書(如演算法)、理論書(圖形學),很少有書籍教你如何開發一個45度角地圖系統加編輯器的,全靠自己思考,以及看前人的代碼,需要時找些網路資料。關鍵是,可以培養最重要的創造力。

對於演算法和設計模式,可以研讀下,但是關鍵還是靠平時如何使用了。新手勉強不來的。

項目管理方面的,就得靠工作經驗了,多思考多提意見不要只走流程。

⑹ 有哪些it程序員的必備神器

  • URL Decoder/Encoder:https://meyerweb.com/eric/tools/dencoder/ 特別實用的一個用來處理URL編碼和解碼的小工具,你甚至可以直接將這個頁面的源代碼保存下來,這樣不需要連接上網也可以離線使用。附送的一個隱藏功能就是當你從任何地方拷貝信息過來的時候,它會自動去除拷貝過來的格式化信息,小編自己基本上每天都會使用這個小工具復制粘貼各種信息。

  • iTerm2是一款完全免費的開源軟體,可以完全替代MacOS的終端。iTerms功能強大,使用方便,可以讓你輕松且高效地管理和定製化你的工作流程。iTerm2的一些特色功能包括:標簽變色,智能選中,自動補齊,全屏展示所有的 tab並支持搜索(Exposé Tabs),豐富的快捷操作等。

  • Textpad這款工具具有無限制的撤銷/重做功能,並且能夠編輯超大文件,文件上限是系統虛擬內存大小。

  • Octotree:https://www.octotree.io/Github是目前使用最廣泛的版本控制工具,然而通過瀏覽器訪問Github的體驗並不是那麼友好,特別是當我們需要不斷地訪問不同文件夾裡面的文件的時候。Octotree正是這樣一款瀏覽器插件,它提供了類似IDE的便於訪問的代碼目錄樹,能夠提高我們在Github上工作效率。

  • Wireshark:這個工具可以用來監控機器上的TCP、HTTP等各層級的網路通信。作為後端開發,如果想看前端發來的請求到底都包含了哪些信息,又沒有前端的調試環境的話,使用Wireshark監控HTTP請求是很好的解決方案。自己在程序中發HTTP請求時,也可以使用它來檢查發出的HTTP請求是否符合自己的預期。

  • Mermaid:這個工具可以使用腳本語言直接渲染出流程圖、時序圖、甘特圖,寫文檔簡單快捷。免拖拽,免排版,格式控制統一。腳本也便於存放修改,樣式可以復用。還可以使用插件集成如Markdown編輯器,進行實時預覽。

  • spectacle:Mac free source 窗口控制工具,拖拽窗口到屏幕邊緣resize,也可以自定義快捷鍵。用起來跟Windows上面一樣。相比較於Moom,SizeUp,Divvy,spectacle支持滑鼠拖拽到邊緣resize,非常便利。

  • Tmux:一個虛擬終端可以管理多個會話,窗口和面板。執行 tmux 命令時就開啟了一個服務並創建了一個會話,窗口和面板。支持分屏,同時處理多個操作。不受斷網影響,避免丟失重要工作進度。方便演示與協作,支持結對編程。

  • Caniuse:https://caniuse.com/#home 通過這個網站,用戶能夠查詢主流瀏覽器特定版本對HTML,CSS和JS的支持情況。並且最重要的是它「免費」!

  • Visual Studio Code:這是微軟出品的IDE工具,跨平台(Linux,Mac,Windows)。輕量級內存佔用,品質穩定且免費。同時內置Git版本控制功能。值得一提的是插件生態豐富,安裝插件簡單,通過插件可以增加更豐富的語言支持、主題定製、文本自動格式化等能力。

熱點內容
創建域用戶賬戶密碼至少多少字元 發布:2025-07-05 03:29:43 瀏覽:13
安卓安裝包反編譯 發布:2025-07-05 03:24:07 瀏覽:711
vi編譯器怎麼查最後幾行 發布:2025-07-05 03:24:00 瀏覽:899
ntp伺服器怎麼搭建 發布:2025-07-05 02:51:53 瀏覽:770
譚浩強c語言基礎 發布:2025-07-05 02:51:45 瀏覽:776
外地卡密碼忘了怎麼辦 發布:2025-07-05 02:50:10 瀏覽:186
電腦配置點評怎麼選 發布:2025-07-05 02:39:23 瀏覽:1002
如何配置與鋅反應的稀硫酸 發布:2025-07-05 02:39:20 瀏覽:937
php分割文件 發布:2025-07-05 02:22:15 瀏覽:478
sql平均成績語句 發布:2025-07-05 02:11:41 瀏覽:277