張新彩 鄔迎
摘要:針對數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)施過程中存在的問題進(jìn)行了分析,結(jié)合應(yīng)用型獨(dú)立學(xué)院學(xué)生的特點(diǎn),課程組精心設(shè)計(jì)課程設(shè)計(jì)案例,并舉例說明案例實(shí)施過程,通過有效的過程管理,達(dá)到課程設(shè)計(jì)目的。
關(guān)鍵詞:數(shù)據(jù)結(jié)構(gòu);課程設(shè)計(jì)案例;過程管理
中圖分類號:G423? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2022)21-0172-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
在進(jìn)行計(jì)算機(jī)相關(guān)專業(yè)的學(xué)習(xí)中,數(shù)據(jù)結(jié)構(gòu)課程是非常重要的一門較為基礎(chǔ)的課程,在眾多學(xué)科中具有很重要的地位[1]。數(shù)據(jù)結(jié)構(gòu)課程理論教學(xué)多以講授線性結(jié)構(gòu)、樹、圖、查找和排序等知識,由于實(shí)踐性較強(qiáng),各個學(xué)校都安排了一定學(xué)時的課程設(shè)計(jì),以使學(xué)生能靈活地選擇合適的邏輯結(jié)構(gòu)、存儲結(jié)構(gòu),并能利用算法來解決實(shí)際生活中的問題,以進(jìn)一步提升學(xué)生使用程序解決實(shí)際問題的能力。文獻(xiàn)[2]提出一種基于能力培養(yǎng)的教學(xué)模式,將教學(xué)設(shè)計(jì)分成3個階段,旨在提高學(xué)生的綜合應(yīng)用能力。
1 課程設(shè)計(jì)存在的問題
經(jīng)過授課數(shù)據(jù)結(jié)構(gòu)課程和進(jìn)行課程設(shè)計(jì)的經(jīng)驗(yàn)得知,學(xué)生的學(xué)習(xí)效果并不理想。究其原因,主要存在如下方面:
1)理論與應(yīng)用相脫節(jié)。現(xiàn)階段,有相當(dāng)一部分學(xué)生,在學(xué)習(xí)完數(shù)據(jù)結(jié)構(gòu)后,只知道如何做題,卻不知它的意義何在?能用它干什么?究其原因主要是沒有理解其含義,再就是與實(shí)踐脫節(jié),這就要求老師在講解相關(guān)知識的時候多講一些具體應(yīng)用,另外在課程設(shè)計(jì)環(huán)節(jié)針對相關(guān)知識點(diǎn)設(shè)計(jì)一些具體案例,加深學(xué)生對知識的理解。
2)程序設(shè)計(jì)基礎(chǔ)較弱。就獨(dú)立學(xué)院而言,通常是入學(xué)第一學(xué)期學(xué)習(xí)程序設(shè)計(jì)語言,第二學(xué)期開設(shè)數(shù)據(jù)結(jié)構(gòu)課程,但通常因?yàn)榇蠖鄶?shù)學(xué)生之前沒有接觸過計(jì)算機(jī)語言,一開始學(xué)習(xí)程序設(shè)計(jì)有一定難度,很多學(xué)生一學(xué)期下來也僅達(dá)到能基本獨(dú)立編寫較簡單程序的程度,對算法的理解和應(yīng)用還不夠透徹,而此課程又跟數(shù)據(jù)結(jié)構(gòu)關(guān)系較緊密,導(dǎo)致其在數(shù)據(jù)結(jié)構(gòu)實(shí)踐環(huán)節(jié)完成實(shí)驗(yàn)時舉步維艱。
2 課程設(shè)計(jì)改革思路
課程組也針對上述問題,提出并實(shí)施如下改革思路。
1)結(jié)合企業(yè)實(shí)際需求,以立足培養(yǎng)高質(zhì)量的應(yīng)用技術(shù)型人才為目標(biāo),注重培養(yǎng)學(xué)生實(shí)踐動手能力,以學(xué)科前沿、與實(shí)際結(jié)合緊密的案例為指引,最大化實(shí)踐為導(dǎo)向,重組教學(xué)內(nèi)容,達(dá)到學(xué)以致用。
2)對學(xué)生實(shí)時因材施教的教學(xué)方法,精心設(shè)計(jì)教學(xué)內(nèi)容。采用線上線下相結(jié)合,啟發(fā)式與問題驅(qū)動相結(jié)合的教學(xué)方法,有助于培養(yǎng)和提高學(xué)生對于計(jì)算的能力。采用案例驅(qū)動、啟發(fā)式、層次化、理論課程與實(shí)踐課程相結(jié)合的方法,提高學(xué)生參與課堂的積極性,增加學(xué)生自主學(xué)習(xí)的能力。
3)注重實(shí)踐教學(xué)改革,開展多層次的課內(nèi)、課外實(shí)踐教學(xué),進(jìn)行高質(zhì)量的課程設(shè)計(jì),直接與企業(yè)直接需求相結(jié)合,形成教學(xué)、實(shí)踐、應(yīng)用生態(tài)圈,促進(jìn)教、學(xué)相長,進(jìn)而形成良性循環(huán),更加符合應(yīng)用型人才的要求。
4)提高學(xué)生參與學(xué)科競賽的積極性,增加學(xué)生參賽自信心。進(jìn)一步加強(qiáng)專業(yè)實(shí)驗(yàn)室的建設(shè),增加硬件投入,完善校內(nèi)實(shí)驗(yàn)室設(shè)施,鼓勵學(xué)生積極投身學(xué)科競賽,增強(qiáng)學(xué)生實(shí)踐動手能力。加強(qiáng)學(xué)校與企業(yè)之間的合作,結(jié)合企業(yè)實(shí)際需求進(jìn)一步改進(jìn)課程建設(shè),為社會輸送高質(zhì)量的應(yīng)用技術(shù)型人才。
5)以O(shè)BE數(shù)據(jù)結(jié)構(gòu)課程為基礎(chǔ),構(gòu)建多元化的課程考核評價體系,結(jié)合課程目標(biāo)[2],注重過程考核,著重對學(xué)生對具體問題進(jìn)行程序設(shè)計(jì)的實(shí)施過程、綜合應(yīng)用能力、團(tuán)隊(duì)合作等方面進(jìn)行考核,旨在提高學(xué)生綜合素質(zhì)。同時對教學(xué)實(shí)施過程實(shí)施有效的管理,及時聽取督導(dǎo)組、學(xué)生的反饋意見,根據(jù)評價持續(xù)不斷改進(jìn)。
3 課程內(nèi)容設(shè)計(jì)
案例的選擇是教學(xué)改革中的核心環(huán)節(jié)之一[3]。選擇合適的案例對數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)內(nèi)容設(shè)置而言至關(guān)重要。所謂合適針對獨(dú)立學(xué)院的學(xué)生而言,主要是要結(jié)合上課所學(xué)的知識,另外還需要考慮到學(xué)生的層次,學(xué)生理解、接受能力有個體差異,所以案例難易應(yīng)適當(dāng),所選案例應(yīng)盡量具有實(shí)際應(yīng)用價值或者能解決一些有趣的問題,讓他們有興趣去學(xué)習(xí)。對于程度較好的學(xué)生,最好選擇一些具有綜合性的案例,能運(yùn)用到不同的知識點(diǎn),達(dá)到融會貫通,除此之外,綜合性案例還有助于培養(yǎng)學(xué)生的團(tuán)隊(duì)協(xié)作能力。對于基礎(chǔ)一般的學(xué)生,應(yīng)該通過案例去引導(dǎo)其去思考,考慮如何運(yùn)用數(shù)據(jù)來解決問題,鼓勵他們獨(dú)立進(jìn)行代碼編寫,有問題去尋求解決方案,從簡單結(jié)構(gòu)開始,等上手后再練習(xí)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)應(yīng)用,循序漸進(jìn)。只有這樣,才能進(jìn)一步地提高學(xué)生對于課程難點(diǎn)的分析、解決能力,實(shí)現(xiàn)自主學(xué)習(xí),提高學(xué)習(xí)動力,達(dá)到課程設(shè)計(jì)的目的。
根據(jù)合作企業(yè)的實(shí)際用人需求,著重提高學(xué)生實(shí)踐操作能力,培養(yǎng)能夠立足于社會的高質(zhì)量人才,精心設(shè)計(jì)以下與實(shí)際生活結(jié)合緊密的課程設(shè)計(jì)案例,并以*號標(biāo)出其難易程度,學(xué)生分層次進(jìn)行課程設(shè)計(jì),達(dá)到學(xué)以致用。
4 課程設(shè)計(jì)實(shí)施過程
在課程設(shè)計(jì)實(shí)施過程中,實(shí)現(xiàn)在教師指導(dǎo)下的以“學(xué)生”為中心的探究式教學(xué)。分布式任務(wù)驅(qū)動型案例體系要引入具體案例,根據(jù)案例中的問題進(jìn)行具體分析,加強(qiáng)學(xué)生主動思考問題能力,分析問題所使用的數(shù)據(jù)結(jié)構(gòu),應(yīng)用所學(xué)知識提出合適的解決方案,再通過編寫程序代碼的方式來驗(yàn)證解決方案是否具備可行性,有效地培養(yǎng)了學(xué)生理論聯(lián)系實(shí)際能力和實(shí)踐動手能力。
以串結(jié)構(gòu)為例,“病毒感染檢測”案例具體實(shí)施流程圖如圖1所示。
4.1 問題描述
任務(wù):將患者的DNA和帶有病毒的DNA標(biāo)記為兩種字母組成的字符串序列,對患者的DNA序列進(jìn)行檢查,看是否存在帶有病毒的DNA序列。如果出現(xiàn)過該帶有該病毒的DNA序列,則判斷該患者已感染了該病毒;反之則未發(fā)生感染。需要注意的是,人的DNA序列與病毒的DNA序列形狀不同,分別為線性與環(huán)狀[5]。
4.2 問題分析
在此案例中,可以將病毒的DNA序列看作是子串,患者的DNA序列看作是主串,病毒感染檢測任務(wù)的實(shí)質(zhì)就是看子串是否在主串中出現(xiàn)過。采用KMP模式匹配算法對主串中子串的具體位置進(jìn)行查找,查找成功即返回起始位置,否則返回0。
4.3 涉及知識
1)串的存儲表示;
2)建立串;
3)模式匹配算法;
4)病毒感染檢測算法。
4.4 算法實(shí)施過程
1)設(shè)計(jì)串的存儲結(jié)構(gòu),可以為順序存儲也可以為鏈?zhǔn)酱鎯?,為方便操作,采用順序存儲結(jié)構(gòu)。
串的定長順序存儲結(jié)構(gòu)如下所示:
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN+1];
通過上述代碼即可定義串類型,其包括255元素的串,下標(biāo)為1-255。MAXSTRLEN可根據(jù)具體要操作的數(shù)據(jù)長度來設(shè)定。(注意:0單元用于放置串的長度)
2)定義StrAssign函數(shù),進(jìn)行串賦值,用于生成一個值為某一字符串常量的串。進(jìn)行賦值時需注意,要檢查字符串常量的長度,若其大于MAXSTRLEN,則無法放置。賦值時串的0下標(biāo)位置存儲字符串常量的長度,串的下標(biāo)為1~字符串長度中依次存儲字符串常量下標(biāo)為0~字符串長度-1的字符。
3)定義get_next函數(shù),完成對模式串T求解next函數(shù)值,代碼不再闡述。
4)定義Index_KMP函數(shù),完成KMP模式匹配算法,代碼不再闡述。
5)定義病毒感染檢測Virus_detection函數(shù),首先對病毒DNA序列進(jìn)行擴(kuò)充至兩倍(由于病毒的DNA序列是環(huán)狀的);然后分段取出病毒序列,調(diào)用get_next()函數(shù)求解出其對應(yīng)的next函數(shù)值,再調(diào)用KMP模式匹配算法檢測病毒序列是否在患者DNA序列中出現(xiàn);最后,只要有一段取出的病毒序列在病人DNA序列中出現(xiàn),則返回OK,否則,返回ERROR。
int Virus_detection(SString S,SString T)
{
int i,j,m,flag;
SString temp;
m=S[0];
for(i=m+1,j=1;j<=m;j++)
{
S[i++]=S[j];
}
S[2*m+1]='\0';
for(i=0;i { for(j=1;j<=m;j++) temp[j]=S[i+j]; temp[m+1]='\0'; temp[0]=m; get_next(temp,next); flag=Index_KMP(T,temp,1); if(flag) break; } if(flag) return OK; else return ERROR; } 6)編寫主函數(shù),完成對病人DNA序列和病毒DNA序列進(jìn)行賦值,采用病毒檢測函數(shù)對患者DNA序列進(jìn)行檢查,若出現(xiàn)病毒序列則為OK,證明輸出存在感染,反之則未出現(xiàn)感染。若還有要檢測的病人DNA序列,再次進(jìn)行輸入即可。 int main() { SString S,T; int k; char flag='Y'; char string1[MAXSTRLEN],string2[MAXSTRLEN]; printf("輸入病毒DNA序列:"); gets(string1); while(flag=='Y') { printf("輸入病人的DNA序列:"); gets(string2); StrAssign(S,string1); StrAssign(T,string2); k=Virus_detection(S,T); if(k) printf("患者已感染。\n"); else printf("患者未感染。\n"); printf("是否還有需要檢測的病人序列?(Y/N)"); scanf("%c",&flag); getchar(); } printf("您的全部檢測已結(jié)束,謝謝使用!"); return 0; } 7)編譯鏈接運(yùn)行此程序,輸入病毒和病人DNA序列,得出結(jié)果如圖2所示。 綜上所述,病毒感染檢測任務(wù)已完成,整體運(yùn)算實(shí)施流程如圖3所示。 4.5 總結(jié)與分析 通過上述過程,利用KMP模式匹配算法完成了對由字符串組成的病毒序列進(jìn)行了病毒感染檢測。要求同學(xué)們能夠熟練定義串的存儲結(jié)構(gòu),對KMP算法的整個思想有進(jìn)一步的深入了解,對利用KMP算法解決具體問題有進(jìn)一步的掌握。如果需要對多個病毒序列進(jìn)行檢測,也可通過把病毒序列的輸入放入到while循環(huán)內(nèi)部即可,只需要對源程序做稍微調(diào)整即可完成。如果數(shù)據(jù)量太多時,我們可將所有的病毒DNA和患者DNA保存至文件中,逐一讀取,逐一處理來完成。當(dāng)然除此之外,可以利用KMP算法對主串中子串的位置和某串出現(xiàn)的次數(shù)進(jìn)行計(jì)算,同學(xué)們可以進(jìn)一步延伸來利用KMP算法求解其他問題??梢钥闯?,KMP模式匹配算法有很廣泛的應(yīng)用。 5 強(qiáng)化實(shí)施過程管理,進(jìn)行多元化考核 在課程任務(wù)實(shí)施過程中,強(qiáng)調(diào)簡單問題自主完成,復(fù)雜問題分工合作,充分利用小組團(tuán)隊(duì)合作方式,提高學(xué)生的團(tuán)隊(duì)合作及分析解決問題的能力。重視過程化考核,采用分組分階段匯報(bào)形式,來強(qiáng)化過程管理,對學(xué)生遇到的問題、掌握的情況能夠深入了解。對于一些問題中的易錯知識點(diǎn)或難度較大的問題通過PPT講解、代碼演示等對問題進(jìn)行進(jìn)一步分析、講解,鼓勵學(xué)生通過不同的存儲結(jié)構(gòu)、多種方案完成問題求解。最后通過題目完成個數(shù)、考勤、課堂表現(xiàn)、代碼質(zhì)量、匯報(bào)等多方面對學(xué)生靈活運(yùn)行數(shù)據(jù)結(jié)構(gòu)解決具體問題的綜合應(yīng)用能力、團(tuán)隊(duì)合作進(jìn)行考核,同時根據(jù)反饋不斷更新教學(xué)資源,完善教學(xué)方法,加強(qiáng)教學(xué)效果,實(shí)現(xiàn)教學(xué)質(zhì)量的大幅提升。 6 結(jié)語 課程組通過對數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)進(jìn)行精心案例設(shè)計(jì),更有效地使教學(xué)理論與實(shí)踐緊密結(jié)合,有效地提高學(xué)生的思維計(jì)算能力,對學(xué)生實(shí)踐能力和程序能力實(shí)現(xiàn)重點(diǎn)培養(yǎng),彰顯了我院OBE教育理念培養(yǎng)高層次應(yīng)用型人才的辦學(xué)特色。通過教學(xué)改革,課程設(shè)計(jì)內(nèi)容設(shè)置更加科學(xué),教學(xué)資源更加完善,考核機(jī)制更加合理,學(xué)生的學(xué)習(xí)效果穩(wěn)步提升,實(shí)踐動手能力不斷增強(qiáng)。 參考文獻(xiàn): [1] 張安勤,田秀霞,張挺.數(shù)據(jù)驅(qū)動的數(shù)據(jù)結(jié)構(gòu)課程案例設(shè)計(jì)研究與實(shí)踐[J].軟件工程,2020,23(4):54-56. [2] 王樹梅,張文斌.基于能力培養(yǎng)的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)教學(xué)模式探討[J].計(jì)算機(jī)教育,2020(11):103-106,110. [3] 姜振鳳,黃婕.基于OBE的數(shù)據(jù)結(jié)構(gòu)課程考核評價體系設(shè)計(jì)與實(shí)踐[J].計(jì)算機(jī)教育,2020(9):123-127,132. [4] 陳青青.數(shù)據(jù)結(jié)構(gòu)課程中分布式案例設(shè)計(jì)的探索與實(shí)踐[J].計(jì)算機(jī)教育,2019(10):109-112. [5] 嚴(yán)蔚敏,李冬梅,吳偉民.數(shù)據(jù)結(jié)構(gòu):C語言版[M].2版.北京:人民郵電出版社,2015. 【通聯(lián)編輯:張薇】