日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构学习之路-第一章:绪论

發(fā)布時(shí)間:2024/1/23 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构学习之路-第一章:绪论 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

出處: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)該知道一個(gè)式子“程序=數(shù)據(jù)結(jié)構(gòu)+算法”,數(shù)據(jù)結(jié)構(gòu)的重要性不言而喻。

而如果有搞ACM的同學(xué)的話,那么對(duì)于各種數(shù)據(jù)結(jié)構(gòu)都不會(huì)陌生,數(shù)據(jù)結(jié)構(gòu)可是算法競賽中的一大核心,沒有被各種數(shù)據(jù)結(jié)構(gòu)虐過,就不算是真正搞過ACM的人了。

本人其實(shí)也只是個(gè)渣渣,由于就讀的學(xué)校屬于二流中的二流,老師們的水平也比較有限,數(shù)據(jù)結(jié)構(gòu)這門課講的并不深入,自己當(dāng)時(shí)學(xué)的也不徹底,在搞ACM的過程中,數(shù)據(jù)結(jié)構(gòu)這方面也十分的不扎實(shí),所以帶著要復(fù)習(xí)鞏固提升自己數(shù)據(jù)結(jié)構(gòu)這方面的能力,于是才開始了寫這連載性的博文了。


進(jìn)入重點(diǎn),首先緒論中先給我們來個(gè)熱身,那就是三元組的建立。

這算是一個(gè)最簡單的集合吧,那么我們就按照書本的步驟來進(jìn)行


第一步:三元組的創(chuàng)建

所謂的集合,通俗而言就是以數(shù)組形式來保存的了,所以我們可以定義一個(gè)數(shù)組,所以我們?cè)谝婚_始,先來定義幾個(gè)類型

[cpp]?view plaincopy
  • typedef?int*?Triplet;//整型指針,作為數(shù)組的起始地址,可以在使用的時(shí)候再申請(qǐng)內(nèi)存??
  • typedef?int?ElemType;//集合中元素的類型??
  • typedef?int?Status;//函數(shù)的類型??


  • 第二步:三元組的操作

    [cpp]?view plaincopy
  • Status?InitTriplet(Triplet?*T,ElemType?v1,ElemType?v2,ElemType?v3)??
  • {??
  • ????//操作結(jié)果:構(gòu)造三元組(v1,v2,v3)??
  • ????*T?=?(ElemType*)malloc(3*sizeof(ElemType));//分配3個(gè)元素的存儲(chǔ)空間??
  • ????if(!(*T))?exit(OVERFLOW);//分配存儲(chǔ)空間失敗??
  • ????(*T)[0]?=?v1;??
  • ????(*T)[1]?=?v2;??
  • ????(*T)[2]?=?v3;??
  • ????return?OK;??
  • }??
  • ??
  • Status?DestoryTriplet(Triplet?*T)??
  • {??
  • ????//操作結(jié)果:三元組被銷毀??
  • ????free(*T);??
  • ????*T?=?NULL;??
  • ????return?OK;??
  • }??
  • ??
  • Status?Get(Triplet?T,int?i,ElemType?*e)??
  • {??
  • ????//初始條件:三元組T已經(jīng)存在,1<=i<=3??
  • ????//操作結(jié)果:用e返回T的第i元的值??
  • ????if(i<1||i>3)?return?ERROR;??
  • ????(*e)?=?T[i-1];??
  • ????return?OK;??
  • }??
  • ??
  • Status?Put(Triplet?T,int?i?,ElemType?e)??
  • {??
  • ????//初始條件:三元組T已經(jīng)存在,1<=i<=3??
  • ????//操作結(jié)果:改變T的第i元值為e??
  • ????if(i<1||i>3)?return?ERROR;??
  • ????T[i-1]?=?e;??
  • ????return?OK;??
  • }??
  • ??
  • Status?IsAscending(Triplet?T)??
  • {??
  • ????//初始條件:三元組T已存在??
  • ????//操作結(jié)果:如果T的三個(gè)元素按升序排列,則返回1,否則返回0??
  • ????return?(T[0]<=T[1])&&(T[1]<=T[2]);??
  • }??
  • ??
  • Status?IsDescending(Triplet?T)??
  • {??
  • ????//初始條件:三元組T已存在??
  • ????//操作結(jié)果:如果T的三個(gè)元素按降序排列,則返回1,否則返回0??
  • ????return?(T[0]>=T[1])&&(T[1]>=T[2]);??
  • }??
  • ??
  • Status?Max(Triplet?T,ElemType?*e)??
  • {??
  • ????//初始條件:三元組T已存在??
  • ????//操作結(jié)果:用e返回T的3個(gè)元素中最大的值??
  • ????(*e)?=?T[0]>T[1]?T[0]:T[1];??
  • ????(*e)?=?(*e)>T[2]?(*e):T[2];??
  • ????return?OK;??
  • }??
  • ??
  • Status?Min(Triplet?T,ElemType?*e)??
  • {??
  • ????//初始條件:三元組T已存在??
  • ????//操作結(jié)果:用e返回T的3個(gè)元素中最小的值??
  • ????(*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;//整型指針,作為數(shù)組的起始地址,可以在使用的時(shí)候再申請(qǐng)內(nèi)存??
  • typedef?int?ElemType;//集合中元素的類型??
  • typedef?int?Status;//函數(shù)的類型??
  • ??
  • Status?InitTriplet(Triplet?*T,ElemType?v1,ElemType?v2,ElemType?v3)??
  • {??
  • ????//操作結(jié)果:構(gòu)造三元組(v1,v2,v3)??
  • ????*T?=?(ElemType*)malloc(3*sizeof(ElemType));//分配3個(gè)元素的存儲(chǔ)空間??
  • ????if(!(*T))?exit(OVERFLOW);//分配存儲(chǔ)空間失敗??
  • ????(*T)[0]?=?v1;??
  • ????(*T)[1]?=?v2;??
  • ????(*T)[2]?=?v3;??
  • ????return?OK;??
  • }??
  • ??
  • Status?DestoryTriplet(Triplet?*T)??
  • {??
  • ????//操作結(jié)果:三元組被銷毀??
  • ????free(*T);??
  • ????*T?=?NULL;??
  • ????return?OK;??
  • }??
  • ??
  • Status?Get(Triplet?T,int?i,ElemType?*e)??
  • {??
  • ????//初始條件:三元組T已經(jīng)存在,1<=i<=3??
  • ????//操作結(jié)果:用e返回T的第i元的值??
  • ????if(i<1||i>3)?return?ERROR;??
  • ????(*e)?=?T[i-1];??
  • ????return?OK;??
  • }??
  • ??
  • Status?Put(Triplet?T,int?i?,ElemType?e)??
  • {??
  • ????//初始條件:三元組T已經(jīng)存在,1<=i<=3??
  • ????//操作結(jié)果:改變T的第i元值為e??
  • ????if(i<1||i>3)?return?ERROR;??
  • ????T[i-1]?=?e;??
  • ????return?OK;??
  • }??
  • ??
  • Status?IsAscending(Triplet?T)??
  • {??
  • ????//初始條件:三元組T已存在??
  • ????//操作結(jié)果:如果T的三個(gè)元素按升序排列,則返回1,否則返回0??
  • ????return?(T[0]<=T[1])&&(T[1]<=T[2]);??
  • }??
  • ??
  • Status?IsDescending(Triplet?T)??
  • {??
  • ????//初始條件:三元組T已存在??
  • ????//操作結(jié)果:如果T的三個(gè)元素按降序排列,則返回1,否則返回0??
  • ????return?(T[0]>=T[1])&&(T[1]>=T[2]);??
  • }??
  • ??
  • Status?Max(Triplet?T,ElemType?*e)??
  • {??
  • ????//初始條件:三元組T已存在??
  • ????//操作結(jié)果:用e返回T的3個(gè)元素中最大的值??
  • ????(*e)?=?T[0]>T[1]?T[0]:T[1];??
  • ????(*e)?=?(*e)>T[2]?(*e):T[2];??
  • ????return?OK;??
  • }??
  • ??
  • Status?Min(Triplet?T,ElemType?*e)??
  • {??
  • ????//初始條件:三元組T已存在??
  • ????//操作結(jié)果:用e返回T的3個(gè)元素中最小的值??
  • ????(*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;??
  • ????//創(chuàng)建三元組??
  • ????printf("請(qǐng)輸入三元組的三個(gè)元素:\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("");??
  • ??
  • ????//取出三元組內(nèi)的元素??
  • ????printf("請(qǐng)輸入想取出三元組中的第幾個(gè)元素(1<=i<=3):");??
  • ????scanf("%d",&n);??
  • ????i?=?Get(T,n,&e);??
  • ????if(i)??
  • ????{??
  • ????????printf("三元組T中的第%d個(gè)元素為:%d\n",n,e);??
  • ????}??
  • ????else??
  • ????{??
  • ????????printf("取出失敗\n");??
  • ????}??
  • ????puts("");??
  • ??
  • ????//修改三元組內(nèi)的元素??
  • ????printf("請(qǐng)輸入想要修改三元組哪個(gè)位置的元素(1<=i<=3):");??
  • ????scanf("%d",&n);??
  • ????puts("");??
  • ????printf("請(qǐng)輸入想要插入的值:");??
  • ????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)容還不錯(cuò),歡迎將生活随笔推薦給好友。