生活随笔
收集整理的這篇文章主要介紹了
数据结构学习之路-第一章:绪论
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
出處:http://blog.csdn.net/libin1105/article/details/47935379
正如很多專業(yè)教材一樣,緒論是少不了的,自然這本書也不例外。
緒論中概括了我們整本書所將要學(xué)習(xí)的內(nèi)容,也就是數(shù)據(jù)結(jié)構(gòu)這本書所探尋的幾大重點(diǎn):集合,線性表,樹,森林,圖。
很多理論的東西,書本已經(jīng)解釋的很詳細(xì)了,我在這里就不必再多廢話了。
我只講一些自己的看法。
首先,只要是寫程序的人,都應(yīng)該知道一個式子“程序=數(shù)據(jù)結(jié)構(gòu)+算法”,數(shù)據(jù)結(jié)構(gòu)的重要性不言而喻。
而如果有搞ACM的同學(xué)的話,那么對于各種數(shù)據(jù)結(jié)構(gòu)都不會陌生,數(shù)據(jù)結(jié)構(gòu)可是算法競賽中的一大核心,沒有被各種數(shù)據(jù)結(jié)構(gòu)虐過,就不算是真正搞過ACM的人了。
本人其實(shí)也只是個渣渣,由于就讀的學(xué)校屬于二流中的二流,老師們的水平也比較有限,數(shù)據(jù)結(jié)構(gòu)這門課講的并不深入,自己當(dāng)時學(xué)的也不徹底,在搞ACM的過程中,數(shù)據(jù)結(jié)構(gòu)這方面也十分的不扎實(shí),所以帶著要復(fù)習(xí)鞏固提升自己數(shù)據(jù)結(jié)構(gòu)這方面的能力,于是才開始了寫這連載性的博文了。
進(jìn)入重點(diǎn),首先緒論中先給我們來個熱身,那就是三元組的建立。
這算是一個最簡單的集合吧,那么我們就按照書本的步驟來進(jìn)行
第一步:三元組的創(chuàng)建
所謂的集合,通俗而言就是以數(shù)組形式來保存的了,所以我們可以定義一個數(shù)組,所以我們在一開始,先來定義幾個類型
[cpp]?view plaincopy
typedef?int*?Triplet;?? typedef?int?ElemType;?? typedef?int?Status;??
第二步:三元組的操作
[cpp]?view plaincopy
Status?InitTriplet(Triplet?*T,ElemType?v1,ElemType?v2,ElemType?v3)?? {?? ?????? ????*T?=?(ElemType*)malloc(3*sizeof(ElemType));?? ????if(!(*T))?exit(OVERFLOW);?? ????(*T)[0]?=?v1;?? ????(*T)[1]?=?v2;?? ????(*T)[2]?=?v3;?? ????return?OK;?? }?? ?? Status?DestoryTriplet(Triplet?*T)?? {?? ?????? ????free(*T);?? ????*T?=?NULL;?? ????return?OK;?? }?? ?? Status?Get(Triplet?T,int?i,ElemType?*e)?? {?? ?????? ?????? ????if(i<1||i>3)?return?ERROR;?? ????(*e)?=?T[i-1];?? ????return?OK;?? }?? ?? Status?Put(Triplet?T,int?i?,ElemType?e)?? {?? ?????? ?????? ????if(i<1||i>3)?return?ERROR;?? ????T[i-1]?=?e;?? ????return?OK;?? }?? ?? Status?IsAscending(Triplet?T)?? {?? ?????? ?????? ????return?(T[0]<=T[1])&&(T[1]<=T[2]);?? }?? ?? Status?IsDescending(Triplet?T)?? {?? ?????? ?????? ????return?(T[0]>=T[1])&&(T[1]>=T[2]);?? }?? ?? Status?Max(Triplet?T,ElemType?*e)?? {?? ?????? ?????? ????(*e)?=?T[0]>T[1]?T[0]:T[1];?? ????(*e)?=?(*e)>T[2]?(*e):T[2];?? ????return?OK;?? }?? ?? Status?Min(Triplet?T,ElemType?*e)?? {?? ?????? ?????? ????(*e)?=?T[0]<T[1]?T[0]:T[1];?? ????(*e)?=?(*e)<T[2]?(*e):T[2];?? ????return?OK;?? }??
第三步:完整代碼實(shí)現(xiàn)
[cpp]?view plaincopy
#include?<iostream>?? #include?<stdio.h>?? #include?<string.h>?? #include?<stack>?? #include?<queue>?? #include?<map>?? #include?<set>?? #include?<vector>?? #include?<math.h>?? #include?<bitset>?? #include?<algorithm>?? #include?<climits>?? #include?<ctype.h>?? #include?<malloc.h>?? #include?<limits.h>?? #include?<stdlib.h>?? #include?<io.h>?? #include?<process.h>?? using?namespace?std;?? ?? #define?TRUE?1?? #define?FALSE?0?? #define?OK?1?? #define?ERROR?0?? #define?INFEASIBLE?-1?? ?? ?? typedef?int*?Triplet;?? typedef?int?ElemType;?? typedef?int?Status;?? ?? Status?InitTriplet(Triplet?*T,ElemType?v1,ElemType?v2,ElemType?v3)?? {?? ?????? ????*T?=?(ElemType*)malloc(3*sizeof(ElemType));?? ????if(!(*T))?exit(OVERFLOW);?? ????(*T)[0]?=?v1;?? ????(*T)[1]?=?v2;?? ????(*T)[2]?=?v3;?? ????return?OK;?? }?? ?? Status?DestoryTriplet(Triplet?*T)?? {?? ?????? ????free(*T);?? ????*T?=?NULL;?? ????return?OK;?? }?? ?? Status?Get(Triplet?T,int?i,ElemType?*e)?? {?? ?????? ?????? ????if(i<1||i>3)?return?ERROR;?? ????(*e)?=?T[i-1];?? ????return?OK;?? }?? ?? Status?Put(Triplet?T,int?i?,ElemType?e)?? {?? ?????? ?????? ????if(i<1||i>3)?return?ERROR;?? ????T[i-1]?=?e;?? ????return?OK;?? }?? ?? Status?IsAscending(Triplet?T)?? {?? ?????? ?????? ????return?(T[0]<=T[1])&&(T[1]<=T[2]);?? }?? ?? Status?IsDescending(Triplet?T)?? {?? ?????? ?????? ????return?(T[0]>=T[1])&&(T[1]>=T[2]);?? }?? ?? Status?Max(Triplet?T,ElemType?*e)?? {?? ?????? ?????? ????(*e)?=?T[0]>T[1]?T[0]:T[1];?? ????(*e)?=?(*e)>T[2]?(*e):T[2];?? ????return?OK;?? }?? ?? Status?Min(Triplet?T,ElemType?*e)?? {?? ?????? ?????? ????(*e)?=?T[0]<T[1]?T[0]:T[1];?? ????(*e)?=?(*e)<T[2]?(*e):T[2];?? ????return?OK;?? }?? ?? int?main()?? {?? ????Triplet?T;?? ????Status?i;?? ????ElemType?e;?? ????ElemType?a,b,c,n;?? ?????? ????printf("請輸入三元組的三個元素:\n");?? ????scanf("%d%d%d",&a,&b,&c);?? ????i?=?InitTriplet(&T,a,b,c);?? ????if(i)?? ????{?? ????????printf("調(diào)用初始化函數(shù)成功!三元組T的元素為:%d,%d,%d\n",T[0],T[1],T[2]);?? ????}?? ????else?? ????{?? ????????printf("調(diào)用初始化函數(shù)失敗\n");?? ????????return?0;?? ????}?? ????puts("");?? ?? ?????? ????printf("請輸入想取出三元組中的第幾個元素(1<=i<=3):");?? ????scanf("%d",&n);?? ????i?=?Get(T,n,&e);?? ????if(i)?? ????{?? ????????printf("三元組T中的第%d個元素為:%d\n",n,e);?? ????}?? ????else?? ????{?? ????????printf("取出失敗\n");?? ????}?? ????puts("");?? ?? ?????? ????printf("請輸入想要修改三元組哪個位置的元素(1<=i<=3):");?? ????scanf("%d",&n);?? ????puts("");?? ????printf("請輸入想要插入的值:");?? ????scanf("%d",&e);?? ????i?=?Put(T,n,e);?? ????if(i)?? ????{?? ????????printf("插入成功,現(xiàn)在的三元組是:%d,%d,%d\n",T[0],T[1],T[2]);?? ????}?? ????else?? ????{?? ????????printf("插入失敗\n");?? ????}?? ????puts("");?? ?? ?????? ????i?=?IsAscending(T);?? ????printf("該三元組是否升序:%s\n",i?"是":"不是");?? ????i?=?IsDescending(T);?? ????printf("該三元組是否降序:%s\n",i?"是":"不是");?? ????puts("");?? ?? ?????? ????i?=?Max(T,&e);?? ????if(i)?? ????????printf("該三元組最大的元素是:%d\n",e);?? ????i?=?Min(T,&e);?? ????if(i)?? ????????printf("該三元組最小的元素是:%d\n",e);?? ????puts("");?? ?? ?????? ????i?=?DestoryTriplet(&T);?? ????if(i)?? ????printf("刪除成功\n");?? ????else?? ????printf("刪除失敗\n");?? ?? ????return?0;?? }??
總體來說,緒論沒有什么好講的,關(guān)鍵只是讓大家熟悉數(shù)據(jù)結(jié)構(gòu),好了,這次就到此為止吧。
總結(jié)
以上是生活随笔為你收集整理的数据结构学习之路-第一章:绪论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。