(001)資料結構(結構體定義,typedef)

來源:互聯網
上載者:User

看了郝斌老師的資料結構,很有感觸,所以就想寫一個系列關於資料結構的文章——不論你是出於單純學習資料結構,還是出於為考研資料結構的初試以及複試做準備的目的,我相信你都可以從本系列博文中獲益。

環境:windows xp(x86),vc++6.0

意圖:要想學好資料結構,那麼結構體、指標、typedef你一定要熟練的使用,所以博主在參考了郝斌老師的資料結構後,對他的練手程式進行了完善,希望能夠在正式開始資料結構的鏈表學習前,將基礎打好。

博主下面的程式主要是為了上述的目的服務的,希望大家能夠獲益,也希望大家能夠給我留言、和我交流。


# include <stdio.h># include <malloc.h>/*簡單說明:類比當初始數組滿時可以自增給定長度的int類型的數組創作靈感:修改自郝斌老師資料結構,郝斌老師的int數組不能自增作    者:leonard書寫時間:2014年3月23日*/typedef struct Arr{int *pBase;//指向int數組首地址的指標int length;//當前的數組最大長度int cnt;//當前的元素個數int increment;//數組增長的步長}Arr;void init_arr(Arr *arr,int len);void selfincrese_arr(Arr *arr);//當arr所指向的int類型數組滿是,自增給定的長度bool append_arr(Arr *arr,int value);//將value直接追加到數組尾部bool insert_arr(Arr *arr,int pos,int value);//將value添加到數組指定pos位置的後面,pos從0開始bool delete_arr(Arr *arr,int pos, int *dvalue);//刪除數組指定pos位置上的資料,並將這個資料返回bool isempty(Arr *arr);bool isfull(Arr *arr);void show_arr(Arr *arr);//順序列印int類型數組的所有元素void inverse_arr(Arr *arr);//對指定數組的所有元素進行頭尾反轉int main(void){Arr arr;int dtemp;init_arr(&arr,6);append_arr(&arr,2);append_arr(&arr,5);append_arr(&arr,7);append_arr(&arr,4);append_arr(&arr,1);append_arr(&arr,10);append_arr(&arr,88);printf("插入之前的數組\n");show_arr(&arr);insert_arr(&arr,3,99);printf("插入之後的數組\n");show_arr(&arr);printf("刪除一個元素之後的數組\n");delete_arr(&arr,5,&dtemp);printf("刪除的資料為%d\n",dtemp);show_arr(&arr);inverse_arr(&arr);printf("數組反轉後\n");show_arr(&arr);return 0;}void init_arr(Arr *arr,int len){if(arr->pBase = (int *)malloc(sizeof(int)*len)){printf("數組初始化成功...\n");arr->length = len;arr->increment = 5;arr->cnt=0;}elseprintf("動態分配記憶體失敗...\n");}bool isfull(Arr *arr){if(arr->length==arr->cnt)return true;elsereturn false;}bool isempty(Arr *arr){if(0==arr->cnt)return true;elsereturn false;}void show_arr(Arr *arr){for(int i=0;i<arr->cnt;i++){printf("a[%d]=%d\n",i,arr->pBase[i]);}printf("\n");}//將int型數組指向的記憶體按照事先的約定擴大void selfincrese_arr(Arr *arr){int *temp = (int *)malloc(sizeof(int)*arr->length);for(int j = 0;j<arr->length;j++){*(temp+j) = arr->pBase[j];}arr->pBase = (int *)malloc(sizeof(int)*(arr->length+=arr->increment));for(int k = 0;k<arr->length;k++){arr->pBase[k] = *(temp+k);}}//在數組尾部直接插入新元素bool append_arr(Arr *arr,int value){if(isfull(arr)){selfincrese_arr(arr);printf("初始數組已滿,現已添加了%d個空白位置,最大元素個數已擴充至%d\n",arr->increment,arr->length);append_arr(arr,value);}else{arr->pBase[arr->cnt] = value;(arr->cnt)++;}return true;}//在pos位置的後面加入一個值為value的元素,pos從0開始bool insert_arr(Arr *arr,int pos,int value){if(pos<0||pos>arr->length||pos>arr->cnt){printf("無法完成插入,因為位置參數不正確!\n");return false;}else{for(int l = arr->cnt;l>=pos+1;l--){arr->pBase[l] = arr->pBase[l-1];}arr->pBase[pos+1] = value;(arr->cnt)++;return true;}}//刪除pos位置上的那個元素,並將刪除位元置上元素的值返回pos從0開始bool delete_arr(Arr *arr,int pos, int *dvalue){*dvalue = arr->pBase[pos];for(int m =pos;m<arr->cnt;m++){arr->pBase[m] = arr->pBase[m+1];}arr->cnt--;return true;}//對指定的int類型數組進行反轉void inverse_arr(Arr *arr){int p=0,q=arr->cnt-1,itemp;while(p<q){itemp = arr->pBase[q];arr->pBase[q] = arr->pBase[p];arr->pBase[p]=itemp;p++,q--;}}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.