當在某些事情上我們有很深的體會時,就很有必要寫一篇心得體會,,通過寫心得體會,,可以幫助我們總結(jié)積累經(jīng)驗。我們?nèi)绾尾拍軐懙靡黄獌?yōu)質(zhì)的心得體會呢,?以下是我?guī)痛蠹艺淼淖钚滦牡皿w會范文大全,希望能夠幫助到大家,,我們一起來看一看吧,。
數(shù)據(jù)結(jié)構(gòu)與算法課程心得體會篇一
學 生 實 驗 報 告 冊
課程名稱:
學生學號:
所屬院部:計算機工程學院
(理工類)
算法與數(shù)據(jù)結(jié)構(gòu) 專業(yè)班級: 計算機統(tǒng)招(1)班
1413101006 學生姓名: 邢亦波
指導教師: 徐永華 15 ——20 16 學年 第 2 學期
金陵科技學院教務處制
實驗報告書寫要求
實驗報告原則上要求學生手寫,要求書寫工整,。若因課程特點需打印的,,要遵照以下字體、字號,、間距等的具體要求,。紙張一律采用a4的紙張。
實驗報告書寫說明
實驗報告中一至四項內(nèi)容為必填項,包括實驗目的和要求,;實驗儀器和設備,;實驗內(nèi)容與過程;實驗結(jié)果與分析,。各院部可根據(jù)學科特點和實驗具體要求增加項目,。
填寫注意事項
(1)細致觀察,及時,、準確,、如實記錄。(2)準確說明,,層次清晰,。
(3)盡量采用專用術(shù)語來說明事物。
(4)外文,、符號,、公式要準確,應使用統(tǒng)一規(guī)定的名詞和符號,。(5)應獨立完成實驗報告的書寫,,嚴禁抄襲、復印,,一經(jīng)發(fā)現(xiàn),,以零分論處。
實驗報告批改說明
實驗報告的批改要及時,、認真,、仔細,一律用紅色筆批改,。實驗報告的批改成績采用百分制,,具體評分標準由各院部自行制定。
實驗報告裝訂要求
實驗批改完畢后,,任課老師將每門課程的每個實驗項目的實驗報告以自然班為單位,、按學號升序排列,裝訂成冊,,并附上一份該門課程的實驗大綱,。
實驗項目名稱: 順序表 實驗學時: 2 同組學生姓名: 無 實驗地點: 實驗日期: 04.05 實驗成績: 批改教師: 徐永華 批改時間:
實驗1 順序表
一、實驗目的和要求
掌握順序表的定位,、插入,、刪除等操作。
二,、實驗儀器和設備
turbo c 2.0
三,、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)編寫程序建立一個順序表,,并逐個輸出順序表中所有數(shù)據(jù)元素的值,。編寫主函數(shù)測試結(jié)果。
(2)編寫順序表定位操作子函數(shù),,在順序表中查找是否存在數(shù)據(jù)元素x,。如果存在,返回順序表中和x值相等的第1個數(shù)據(jù)元素的序號(序號從0開始編號),;如果不存在,,返回-1。編寫主函數(shù)測試結(jié)果,。(3)在遞增有序的順序表中插入一個新結(jié)點x,,保持順序表的有序性。
解題思路:首先查找插入的位置,,再移位,,最后進行插入操作;從第一個元素開始找到第一個大于該新結(jié)點值x的元素位置i即為插入位置,;然后將從表尾開始依次將元素后移一個位置直至元素i,;最后將新結(jié)點x插入到i位置。
(4)刪除順序表中所有等于x的數(shù)據(jù)元素,。
2,、選做題
(5)已知兩個順序表a和b按元素值遞增有序排列,要求寫一算法實現(xiàn)將a和b歸并成一個按元素值遞減有序排列的順序表(允許表中含有值相同的元素),。
程序清單: 1.(1)
#include
#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){
} void display(shun *s){} main()int i;if(s->length==0)printf(“沒有數(shù)據(jù)n”);else for(i=0;i
length;i++){ } printf(“%-5d”,s->a[i]);int i,j;printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);} for(i=0;i
length;i++){ } scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);
{} init(&s);setup(&s);display(&s);
1.(2)
#include
#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){
} int find(shun *s,int x){ int i;for(i=0;ilength;i++){ int i,j;printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);} for(i=0;i
length;i++){ } scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);
if(s->a[i]==x)return i;} return 0;} void display(shun *s){} main(){
} int x;init(&s);setup(&s);display(&s);printf(“輸入xn”);scanf(“%d”,&x);if(find(&s,x))printf(“找到位置是%dn”, find(&s,x));printf(“-1n”);else int i;if(s->length==0)printf(“沒有數(shù)據(jù)n”);else for(i=0;i
length;i++){ } printf(“%-5d”,s->a[i]);
1.(3)#include#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ s->length=0;
} void setup(shun *s){} void insert(shun *s,int x){ int i,j;if((s->length+1)>=maxsize){ printf(“溢出n”);exit(0);int i,j;printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);} for(i=0;i
length;i++){ } scanf(“%d”,&s->a[i]);printf(“溢出n”);} for(i=0;i
length;i++){ if(s->a[i]>=x)break;} for(j=s->length-1;j>=i;j--){ s->a[j+1]=s->a[j];} s->a[i]=x;s->length++;} void display(shun *s){
int i;if(s->length==0)printf(“沒有數(shù)據(jù)n”);else for(i=0;ilength;i++)
} main(){} int x;init(&s);setup(&s);printf(“輸入xn”);scanf(“%d”,&x);insert(&s,x);display(&s);{ } printf(“%-5d”,s->a[i]);
1.(4)#include
#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun s;void init(shun *s){ } void setup(shun *s){
int i,j;printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);s->length=0;printf(“溢出n”);} void delet(shun *s,int x){ int i,j;for(i=0;i
length;i++){
} void display(shun *s){} main(){
} int x;init(&s);setup(&s);printf(“輸入xn”);scanf(“%d”,&x);delet(&s,x);display(&s);int i;if(s->length==0)printf(“沒有數(shù)據(jù)n”);else for(i=0;i
length;i++){ } printf(“%-5d”,s->a[i]);if(s->a[i]==x){
for(j=i;jlength;j++){ s->a[j]=s->a[j+1];} s->length--;i--;} for(i=0;i
length;i++){ } scanf(“%d”,&s->a[i]);} }
2.#include#define maxsize 100 #define datatype int typedef struct shun { datatype a[maxsize];int length;}shun;shun a,b,c;void init(shun *s){ } void setup(shun *s){
} } int i,j,t;printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);while(s->length>=maxsize){ printf(“需要幾個數(shù)n”);scanf(“%d”,&s->length);} for(i=0;ilength;i++){ } for(i=0;i
length;i++){
for(j=i+1;jlength;j++){
} if(s->a[i]a[j]){
} t=s->a[i];s->a[j]=t;s->a[i]=s->a[j];scanf(“%d”,&s->a[i]);s->length=0;printf(“溢出n”);void cat(shun *a,shun *b){ int i,j=0,t;if((a->length+b->length)>=maxsize){
} for(i=0;ilength;i++){ } for(j=0;j
length;j++){
} =a->length+b->length;} void display(shun *s){
} int i;if(s->length==0)printf(“沒有數(shù)據(jù)n”);else for(i=0;i
length;i++){ } printf(“%-5d”,s->a[i]);} for(i=0;i
for(j=i+1;j
} if(c.a[i]
} t=c.a[i];c.a[j]=t;c.a[i]=c.a[j];c.a[i]=b->a[j];i++;c.a[i]=a->a[i];printf(“溢出n”);exit(0);
main(){
} init(&a);printf(“a初始化n”);setup(&a);init(&b);setup(&b);cat(&a,&b);display(&c);printf(“b初始化n”);
四,、實驗結(jié)果與分析(程序運行結(jié)果及其分析)1.(1)
1.(2)
1.(3)
1.(4)
2.金陵科技學院實驗報告
五、實驗體會(遇到問題及解決辦法,,編程后的心得體會)
我覺得編程不能只要完成其主要功能就行了,,還要考慮到邊界值,考慮是否會出錯等等,。有時候一種方法編不通,,不如換種方法編。我覺得編程挺考慮耐心的,,恩,,就這么多感悟了。
實驗項目名稱: 單鏈表 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗2 單鏈表
一,、實驗目的和要求
1,、實驗目的
掌握單鏈表的定位、插入,、刪除等操作,。
2,、實驗要求
(1)注意鏈表的空間是動態(tài)分配的,某結(jié)點不用之后要及時進行物理刪除,,以便釋放其內(nèi)存空間,。
(2)鏈表不能實現(xiàn)直接定位,一定注意指針的保存,,防止丟失,。
二、實驗儀器和設備
turbo c 2.0
三,、實驗內(nèi)容與過程(含程序清單及流程圖)
1,、必做題
(1)編寫程序建立一個單鏈表,并逐個輸出單鏈表中所有數(shù)據(jù)元素,。(2)在遞增有序的單鏈表中插入一個新結(jié)點x,,保持單鏈表的有序性。
解題思路:首先查找插入的位置然后進行插入操作,;從第一個結(jié)點開始找到第一個大于該新結(jié)點值的結(jié)點即為插入位置,;然后在找到的此結(jié)點之前插入新結(jié)點;注意保留插入位置之前結(jié)點的指針才能完成插入操作,。
(3)編寫實現(xiàn)帶頭結(jié)點單鏈表就地逆置的子函數(shù),,并編寫主函數(shù)測試結(jié)果。
2,、選做題
已知指針la和lb分別指向兩個無頭結(jié)點單鏈表的首元結(jié)點,。要求編一算法實現(xiàn),從表la中刪除自第i個元素起共len個元素后,,將它們插入到表lb中第j個元素之前,。程序清單:
1.(1)
#include
#define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;list *setup(list *s)
{} void display(list *head){ list *rear;if(head==null){
} } main(){
list *head;head=setup(s);display(head);free(s);rear=head;printf(“%c”,rear->a);while(rear->next!=null){
} rear=rear->next;printf(“%c”,rear->a);printf(“沒有數(shù)據(jù)n”);else list *head=null;list *rear=null;
char c;printf(“請輸入c直到$n”);c=getchar();while(c!='$'){
} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;
} free(head);1.(2)#include
#define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;list *setup(list *s){
} void paixu(list *head){list *rear;list *p;datatype min;if(head==null){ list *head=null;list *rear=null;
char c;printf(“請輸入c直到$n”);c=getchar();while(c!='$'){
} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;
} void insert(list *head,datatype x){
list *p;list *q;list *r;if(head==null)printf(“空表n”);p=head;q=head;r=malloc(sizeof(list));r->a=x;while(p->next!=null){
} while(q->next!=p)q=q->next;r->next=p;q->next=r;if(p->next==null)if(x
a){ } p=p->next;break;} p=head;
while(p->next!=null){
do {
rear=rear->next;if(min>rear->a){
} min=rear->a;rear->a=p->a;p->a=min;
min=p->a;rear=p;printf(“空表!n”);exit(0);} while(rear->next!=null);p=p->next;}
} void display(list *head){ list *rear;if(head==null){
} } main(){
} datatype x,c;list *head;head=setup(s);paixu(head);printf(“請輸入xn”);c=getchar();x=getchar();insert(head,x);display(head);free(s);free(head);rear=head;printf(“%c”,rear->a);while(rear->next!=null){
} rear=rear->next;printf(“%c”,rear->a);printf(“沒有數(shù)據(jù)n”);else p->next=r;1.(3)#include
#define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s;
list *setup(list *s){} list *nizhi(list *head){
list *h;list *rear;int i=0;char b[100];h=malloc(sizeof(list));h->next=head;rear=head;do {
b[i]=rear->a;rear=rear->next;i++;list *head=null;list *rear=null;
char c;printf(“請輸入c直到$n”);c=getchar();while(c!='$'){
} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;}while(rear->next!=null);b[i]=rear->a;rear=head;for(;i>=0;i--){
} rear->a=b[i];rear=rear->next;
} void display(list *head){ list *rear;if(head==null){
} } main(){
} list *head;head=setup(s);head=nizhi(head);display(head);free(s);free(head);rear=head;printf(“%c”,rear->a);while(rear->next!=null){
} rear=rear->next;printf(“%c”,rear->a);printf(“沒有數(shù)據(jù)n”);else return head;2.#include
#define datatype char typedef struct lnklist { datatype a;struct lnklist *next;}list;list *s1;list *s2;list *setup(list *s){
list *head=null;list *rear=null;char c;printf(“請輸入c直到$n”);c=getchar();while(c!='$')
} void dein(list *la,list *lb,int i,int len,int j){
int k;list *rear;list *t;list *h;list *r;list *q;h=null;rear=la;q=la;for(k=1;k!=i;k++){
} while(q->next!=rear){
t=malloc(sizeof(list));t->a=rear->a;if(h==null)h=t;q=q->next;for(k=1;k<=len;k++)rear=rear->next;if(rear->next==null&&k!=i){
} printf(“沒找到i的位置n”);exit(0);
{
} if(rear!=null)rear->next=null;return head;s=malloc(sizeof(list));s->a=c;if(head==null){ } else rear->next=s;rear=s;c=getchar();head=s;
} void display(list *head){ list *rear;if(head==null){
rear=head;printf(“%c”,rear->a);while(rear->next!=null){
} printf(“n”);rear=rear->next;printf(“%c”,rear->a);printf(“沒有數(shù)據(jù)n”);else
} q->next=rear;if(r!=null)r->next=null;rear=lb;for(k=1;k!=j;k++){
} q=lb;while(q->next!=rear)q=q->next;r->next=rear;q->next=h;rear=rear->next;if(rear->next==null&&k!=j){
} printf(“沒找到j的位置n”);exit(0);else r->next=t;r=t;rear=rear->next;if(rear->next==null&&k
} printf(“l(fā)en太長n”);exit(0);
} } main(){ char c;
} list *la;list *lb;int i,len,j;printf(“建立單鏈表lan”);la=setup(s1);printf(“建立單鏈表lbn”);lb=setup(s2);printf(“請輸入要刪的位置in”);scanf(“%d”,&i);printf(“請輸入要刪減的數(shù)據(jù)長度lenn”);scanf(“%d”,&len);printf(“請輸入要插入的位置jn”);scanf(“%d”,&j);dein(la,lb,i,len,j);printf(“顯示lan”);display(la);printf(“顯示lbn”);display(lb);free(la);free(lb);c=getchar();
四,、實驗結(jié)果與分析(程序運行結(jié)果及其分析)1.(1)
1.(2)
1.(3)
2.金陵科技學院實驗報告
五,、實驗體會(遇到問題及解決辦法,編程后的心得體會)
單鏈表以前沒怎么編過,,所以現(xiàn)在編有點陌生,,要編譯好幾次才能運行。我覺得還是不能光看書,,還要多編幾道題比較有手感,。
實驗項目名稱: 堆棧和隊列 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗3 堆棧和隊列
一、實驗目的和要求
(1)掌握應用棧解決問題的方法,。(2)掌握利用棧進行表達式求和的算法,。
(3)掌握隊列的存儲結(jié)構(gòu)及基本操作實現(xiàn),并能在相應的應用問題中正確選用它們,。
二,、實驗儀器和設備
turbo c 2.0
三,、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)判斷一個算術(shù)表達式中開括號和閉括號是否配對,。(2)測試“漢諾塔”問題,。
(3)假設稱正讀和反讀都相同的字符序列為”回文”,試寫一個算法判別讀入的一個以’@’為結(jié)束符的字符序列是否是“回文”,。
2、選做題
在順序存儲結(jié)構(gòu)上實現(xiàn)輸出受限的雙端循環(huán)隊列的入列和出列算法,。設每個元素表示一個待處理的作業(yè),,元素值表示作業(yè)的預計時間。入隊列采取簡化的短作業(yè)優(yōu)先原則,,若一個新提交的作業(yè)的預計執(zhí)行時間小于隊頭和隊尾作業(yè)的平均時間,,則插入在隊頭,否則插入在隊尾,。程序清單:
1.(1)
#include
#include
char a[100];int panduan(char *a){
int i,k,count1=0,count2=0;for(i=0;a[i]!='';i++){ {count1++;for(k=i+1;a[k]!='';k++){ if(a[k]==')')if(a[i]=='(')
} main(){
} printf(“請輸入算式n”);gets(a);if(panduan(a)==1){ } else printf(“算式()不配對n”);printf(“算式()配對n”);
break;} if(a[k]=='')return 0;} if(a[i]==')')} if(count1!=count2)return 0;return 1;count2++;1.(2)
#include
int i;void move(int n,char a,char c){ printf(“第%d步:將%d號盤子%c--->%cn”,i++,n,a,c);} void hanno(int n,char a,char b,char c){
} main(){ if(n==1){} hanno(n-1,a,c,b);move(n,a,c);hanno(n-1,b,a,c);move(1,a,c);else
} int n;char a,b,c;printf(“請輸入要移動的盤子數(shù)n”);scanf(“%d”,&n);a='a';b='b';c='c';hanno(n,a,b,c);1.(3)
#include
#include
char s[100];int huiwen(char s[]){
} main(){while(1){ printf(“請輸入字符直到@n”);gets(s);if(huiwen(s))
} printf(“是回文n”);printf(“不是回文n”);else int i,j=0;char b[100];for(i=0;s[i]!='@';i++);for(i=i-1;i>=0;i--){
} j=0;for(i=0;s[i]!='@';i++){ } return 1;return 0;b[j]=s[i];j++;if(s[i]!=b[j])j++;
}
2.#include
#define maxsize 100 typedef struct duilie {
int a[maxsize];int head;int rear;}dui;dui *s;void init(dui *s){} void setup(dui *s,int x){
if(x<((s->a[s->head]+s->a[s->rear])/2)){
} else { s->rear=(s->rear++)%maxsize;s->head=(s->head--)%maxsize;s->a[s->head]=x;s->head=maxsize-1;s->rear=maxsize-1;s->a[s->head]=0;s->a[s->rear]=0;
} } s->a[s->rear]=x;void display(dui *s){
printf(“s隊為:”);while(s->head==s->rear){ printf(“%-3d”,s->a[s->head]);
} main(){
} int x;while(1){ printf(“請輸入x直到0n”);scanf(“%d”,&x);setup(s,x);if(x==0)} if(s->head!=(s->rear+1)%maxsize)printf(“隊滿n”);display(s);break;} s->head=(s->head++)%maxsize;
四,、實驗結(jié)果與分析(程序運行結(jié)果及其分析)1.(1)
1.(2)
1.(3)
五、實驗體會(遇到問題及解決辦法,,編程后的心得體會)
實驗項目名稱: 串 實驗學時: 2 同組學生姓名: 實驗地點: 實驗日期: 實驗成績: 批改教師: 批改時間:
實驗4 串
一,、實驗目的和要求
掌握串的存儲及應用。
二,、實驗儀器和設備
turbo c 2.0
三,、實驗內(nèi)容與過程(含程序清單及流程圖)
1、必做題
(1)編寫輸出字符串s中值等于字符ch的第一個字符的函數(shù),,并用主函數(shù)測試結(jié)果,。
(2)編寫輸出字符串s中值等于字符ch的所有字符的函數(shù),并用主函數(shù)測試結(jié)果,。
解題思路:可以將第一題程序改進成一個子函數(shù),,在本題中循環(huán)調(diào)用。(3)設字符串采用單字符的鏈式存儲結(jié)構(gòu),,編程刪除串s從位置i開始長度為k的子串,。
2、選做題
假設以鏈結(jié)構(gòu)表示串,,編寫算法實現(xiàn)將串s插入到串t中某個字符之后,,若串t中不存在這個字符,則將串s聯(lián)接在串t的末尾,。
提示:為提高程序的通用性,,插入位置字符應設計為從鍵盤輸入。程序清單:
1.(1)
#include
#include
void fun(char s[],char ch){
int i;for(i=0;s[i]!='';i++){} printf(“沒找到n”);if(ch==s[i]){
} printf(“找到字符%c在位置%dn”,s[i],i+1);exit(0);
} main(){
} char s[100],ch;printf(“請輸入字符串sn”);gets(s);printf(“請輸入要查找的字符chn”);scanf(“%c”,&ch);fun(s,ch);1.(2)
#include
#include
char s[100];void fun(char s[],char ch){ int i;if(strcmp(s,“")==0){ printf(”字符串s為空n“);exit(0);} for(i=0;s[i]!='';i++){
} main(){ char ch;printf(”請輸入字符串sn“);gets(s);printf(”請輸入要查找的chn“);scanf(”%c“,&ch);fun(s,ch);} if(ch==s[i])printf(” %c“,s[i]);} 1.(3)#include
#include
typedef struct chuanlian { char c;struct chuanlian *next;}chuan;chuan *s;chuan *setup(chuan *s){
} void delet(chuan *chu,int i,int k){int j;chuan *p;chuan *t;if(chu==null){
} p=chu;for(j=1;j
c=ch;if(head==null){ } else
} if(rear!=null)rear->next=null;return head;rear->next=s;rear=s;head=s;s=malloc(sizeof(chuan));ch=getchar();}
void display(chuan *chu){ chuan *p;
} main(){
int i,k;chuan *head;head=setup(s);printf(”請輸入要刪除字符的位置in“);scanf(”%d“,&i);p=chu;if(chu==null){
} printf(”%c“,p->c);while(p->next!=null){
} p=p->next;printf(”%c“,p->c);printf(”空串n“);exit(0);{
} t=p->next;for(j=1;j
} p->next=t;if(p->next==null&&j
} t=t->next;printf(”串長度太小,,無法刪除%d個元素n“,k);exit(0);if(p->next==null&&j
} p=p->next;printf(”無法找到第%d位置n“,i);exit(0);
printf(”請輸入要刪除字符的個數(shù)kn“);scanf(”%d“,&k);delet(head,i,k);display(head);free(head);free(s);} 2.#include
#include
typedef struct chuanlian { char c;struct chuanlian *next;}chuan;chuan *s,*t;chuan *setup(chuan *chu){
chuan *head=null;chuan *rear=null;char ch;printf(”請輸入字符ch直到$n“);ch=getchar();while(ch!='$'){ chu=malloc(sizeof(chuan));chu->c=ch;if(head==null){ head=chu;
} } else rear->next=chu;rear=chu;ch=getchar();} if(rear!=null)rear->next=null;return head;
void insert(chuan *s1,chuan *s2,char x){
chuan *p;chuan *q;p=s1;if(s1==null){
} {
} while(p->next!=null){ if(p->c==x)break;printf(”s是空串n“);exit(0);if(s2==null)printf(”t是空串n“);exit(0);
} } p=p->next;if(p->next==null)p->next=s2;else {
} q=s2;while(q->next!=null)q=q->next;q->next=p->next;p->next=s2;void display(chuan *chu){ chuan *p;
} p=chu;if(chu==null){
} printf(”%c“,p->c);while(p->next!=null){
} p=p->next;printf(”%c“,p->c);printf(”空串n“);exit(0);
main(){
char x,c;printf(”建立單鏈串tn“);t=setup(t);c=getchar();printf(”建立單鏈串sn“);s=setup(s);c=getchar();printf(”請輸入要在什么字符后插入n");x=getchar();
}
insert(t,s,x);display(t);
數(shù)據(jù)結(jié)構(gòu)與算法課程心得體會篇二
數(shù)據(jù)結(jié)構(gòu)與算法實驗班學習體會
000648043 姚金宇
我是計算機系2006級本科生,在大二上學期選修了張銘老師的數(shù)據(jù)結(jié)構(gòu)與算法實驗班,。數(shù)據(jù)結(jié)構(gòu)與算法課是每一個計算機專業(yè)學生的必修課,從我目前所學習的后續(xù)課程,,包括算法設計、編譯技術(shù)等課程來看,這門課是其非常重要的基礎(chǔ)課程之一,。
我從初中就開始接觸高中的信息學奧林匹克競賽,對數(shù)據(jù)結(jié)構(gòu)與算法方面的相關(guān)知識接觸的比較早,。張老師為了更有針對性地對具有不同基礎(chǔ)的學生進行因材施教,,開設了數(shù)據(jù)結(jié)構(gòu)算法實驗班,我很榮幸地被批準通過選修實驗班的課,。通過一個學期的學習,,我加深了對數(shù)據(jù)結(jié)構(gòu)與算法的相關(guān)知識的理解,,并通過張老師細致地講解,將自己過去從高中競賽所學到的離散的、碎片式的知識點連貫地串了起來,,形成了一套較為完整的知識體系。我想這對于我后續(xù)的學習和對更高層次數(shù)據(jù)結(jié)構(gòu)與算法知識的探索,都是大有裨益的,。
我認為,,在這門課的學習過程中,,張老師所引導我們掌握的不僅僅是知識點與問題的簡單聯(lián)系,,而是進行拓展性地思考和探索。例如樹的順序存儲,,除了講解各種帶標記的存儲方法以外,,我們還討論了這些存儲方式中記錄的信息是不是都是必須的、如何用最少的標記信息表示一棵樹等問題,。這就讓我們對原本看似平凡的知識有更深刻的認識,。另外,我們所完成的作業(yè)和練習也都不是簡單的解題訓練,,很多問題都是帶有可研究性與可擴展性的,,甚至很多問題沒有單一的結(jié)論,這就引導我們創(chuàng)造性地應用所學的知識去研究問題,、解決問題,。
張老師在實驗班的課堂上不但注重基礎(chǔ)知識的講解,,還會適當介紹一些較為高級的數(shù)據(jù)結(jié)構(gòu)(例如伸展樹、后綴樹等),,以及一些較新的算法研究成果。這些介紹不僅對于鞏固基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)有很強的促進作用,還讓對我們往后更難的課程更有信心。事實上,我認為算法與數(shù)據(jù)結(jié)構(gòu)在我們計算機專業(yè)課程的學習中是無處不在的,,圖論中的樹、圖模型,組合數(shù)學中模型的計數(shù),,編譯技術(shù)中關(guān)于文法的分析,、自動機模型,無一不包含數(shù)據(jù)結(jié)構(gòu)與算法的理論,。能夠更快,、更好地掌握后續(xù)這些課程的知識體系,,于我在數(shù)據(jù)結(jié)構(gòu)與算法課中所學是分不開的,。我是北大acm隊員之一,并于今年代表北京大學參加了第32屆acm-icpc國際大學生程序設計競賽全球總決賽,,獲得了第13名,。acm-icpc競賽十分注重選手對于模型抽象的能力、對于數(shù)據(jù)結(jié)構(gòu)與算法的理解以及編程能力,。這門課程對我參加acm競賽無疑也是幫助甚大,。它讓我更系統(tǒng)、透徹地理解了數(shù)據(jù)結(jié)構(gòu)與算法的相關(guān)知識,,對于在賽場上的解題能力和解題速度都有很大的提高,。總而言之,,張老師的數(shù)據(jù)結(jié)構(gòu)與算法這門課程作為我的必修課之一,,對于我計算機專業(yè)的學習是幫助很大并且影響深遠的。
北京大學計算機系2006級本科生
000648043 姚金宇
2008年4月14日
數(shù)據(jù)結(jié)構(gòu)與算法課程心得體會篇三
課程設計的心得體會
陳康蔭080401200708級計科系計本(2)班
完成了這次的二元多項式加減運算問題的課程設計后,,我的心得體會很多,細細梳理一下,,有以下幾點:
1、程序的編寫中的語法錯誤及修改
因為我在解決二元多項式問題中,,使用了鏈表的方式建立的二元多項式,,所以程序的空間是動態(tài)的生成的,而且鏈表可以靈活地添加或刪除結(jié)點,,所以使得程序得到簡化,。但是出現(xiàn)的語法問題主要在于子函數(shù)和變量的定義,,降序排序,關(guān)鍵字和函數(shù)名稱的書寫,,以及一些庫函數(shù)的規(guī)范使用,,這些問題均可以根據(jù)編譯器的警告提示,對應的將其解決,。
2,、程序的設計中的邏輯問題及其調(diào)整
我在設計程序的過程中遇到許多問題,首先在選擇數(shù)據(jù)結(jié)構(gòu)的時候選擇了鏈表,,但是鏈表的排序比較困難,,特別是在多關(guān)鍵字的情況下,在一種關(guān)鍵字確定了順序以后,,在第一關(guān)鍵字相同的時候,,按某種順序?qū)Φ诙P(guān)鍵字進行排序。在此程序中共涉及到3個量數(shù),,即:系數(shù),,x的指數(shù)和y的指數(shù),而關(guān)鍵字排是按x的指數(shù)和y的指數(shù)來看,,由于要求是降冪排序且含有2個關(guān)鍵字,,所以我先選擇x的指數(shù)作為第一關(guān)鍵字,先按x的降序來排序,,當x的指數(shù)相同時,,再以y為關(guān)鍵字,按照y的指數(shù)大小來進行降序排列,。
另外,,我在加法函數(shù)的編寫過程中也遇到了大量的問題,由于要同時比較多個關(guān)鍵字,,而且設計中涉及了數(shù)組和鏈表的綜合運用,,導致反復修改了很長的時間才完成了一個加法的設計。但是,,現(xiàn)在仍然有一個問題存在:若以0為系數(shù)的項是首項則顯示含有此項,,但是運算后則自動消除此項,這樣是正確的,。但是當其不是首項的時候,,加法函數(shù)在顯示的時候有0為系數(shù)的項時,,0前邊不顯示符號,,當然,這樣也可以理解成當系數(shù)為0時,,忽略這一項,。這也是本程序中一個不完美的地方,。
我在設計減法函數(shù)的時候由于考慮不夠充分就直接編寫程序,走了很多彎路,,不得不停下來仔細研究算法,,后來發(fā)現(xiàn)由于前邊的加法函數(shù)完全適用于減法,只不過是將二元多項式b的所有項取負再用加法函數(shù)即可,,可見算法的重要性不低于程序本身,。
3、程序的調(diào)試中的經(jīng)驗及體會
我在調(diào)試過程中,,發(fā)生了許多小細節(jié)上的問題,,它們提醒了自己在以后編程的時候要注意細節(jié),即使是一個括號的遺漏或者一個字符的誤寫都會造成大量的錯誤,,浪費許多時間去尋找并修改,,總結(jié)的教訓就是寫程序的時候,一定要仔細,、認真,、專注。
我還有一個很深的體會就是格式和注釋,,由于平時不注意格式和注釋這方面的要求,,導致有的時候在檢查和調(diào)試的時候很不方便。有的時候甚至剛剛完成一部分的編輯,,結(jié)果一不注意,,就忘記了這一部分程序的功能。修改的時候也有不小心誤刪的情況出現(xiàn),。如果注意格式風格,,并且養(yǎng)成隨手加注釋的習慣,就能減少這些不必要的反復和波折,。還有一點,,就是在修改的時候,要注意修改前后的不同點在哪里,,改后調(diào)試結(jié)果要在原有的基礎(chǔ)上更加精確,。