数据结构学习笔记(一)

假期以来我都坚持每天看一点郝斌的数据结构视频。讲的很透彻,也很风趣。

前几天都是为讲数据结构而做准备,讲了一些结构体和指针,今天终于开始正式将数据结构。说实话,我今天才知道函数的用处。。

照着郝斌讲连续存储数组的算法演示,又自己写了一遍,发现有一个错误,左看右看都看不出哪错了,索性贴出了,,,有兴趣的朋友可以看看

百度求助,一位牛人看出错误来,谢谢了!重新贴出正确的代码

  1. #include <stdio.h>  
  2. #include <malloc.h>  
  3. #include <stdlib.h>   //  包含exit  
  4. int val,i,t;  
  5. struct Arr  
  6. {  
  7.     int * pBase;    //储存的是数组第一个元素的地址  
  8.     int len;    //数组所能容纳的最大元素个数  
  9.     int cnt;    //当前数组有效个数  
  10. };  
  11. void init_arr(struct Arr * pArr,int length);    //初始化  
  12. bool append_arr(struct Arr * pArr,int val);  
  13. bool insert_arr(struct Arr * pArr,int pos,int val);     //pos的值从1开始  
  14. bool delete_arr(struct Arr * pArr,int pos,int *pVal);  
  15. int get();  
  16. bool is_empty(struct Arr * pArr);  
  17. bool is_full(struct Arr * pArr);  
  18. void sort_arr(struct Arr * pArr);  
  19. void show_arr(struct Arr * pArr);  
  20. void inversion_arr(struct Arr * pArr);  //倒置  
  21. int main()  
  22. {  
  23.     struct Arr arr;  
  24.     init_arr(&arr,6);  
  25.     show_arr(&arr);  
  26.     append_arr(&arr,1);  
  27.     append_arr(&arr,2);  
  28.     append_arr(&arr,3);  
  29.     append_arr(&arr,4);  
  30.     delete_arr(&arr,1,&val);  
  31.     return 0;  
  32. }  
  33. void init_arr(struct Arr * pArr,int length)  
  34. {  
  35.     pArr->pBase = (int *)malloc(sizeof(int) * length);  
  36.     if (NULL == pArr->pBase)  
  37.     {  
  38.         printf("动态内存分配失败!\n");  
  39.         exit(-1);   //终止整个程序  
  40.     }  
  41.     else  
  42.     {  
  43.         pArr->len = length;  
  44.         pArr->cnt = 0;  
  45.     }  
  46.     return;  
  47.   
  48. }  
  49. bool is_empty(struct Arr * pArr)  
  50. {  
  51.     if(0 == pArr->cnt)  
  52.         return true;  
  53.     else  
  54.         return false;  
  55. }  
  56. bool is_full(struct Arr * pArr)  
  57. {  
  58.     if(pArr->cnt == pArr->len)  
  59.         return true;  
  60.     else  
  61.         return false;  
  62. }  
  63. void show_arr(struct Arr * pArr)  
  64. {  
  65.     if( is_empty(pArr) )    //pArr本来就是地址  
  66.     {  
  67.         printf("数组为空\n");  
  68.     }  
  69.     else  
  70.     {  
  71.         for(int i=0;i<pArr->cnt;++i)  
  72.             printf("%d   ",pArr->pBase[i]);  
  73.         printf("\n");  
  74.     }  
  75. }  
  76. bool append_arr(struct Arr * pArr,int val)  
  77. {  
  78.     if( is_full(pArr) )  
  79.         return false;  
  80.     else  
  81.         pArr->pBase[pArr->cnt] = val;  
  82.         (pArr->cnt)++;  
  83.     return true;  
  84. }  
  85. bool insert_arr(struct Arr * pArr,int pos,int val)  
  86. {  
  87.     int i;  
  88.     if(pos<1||pos>pArr->len)  
  89.     for (i=pArr->cnt-1;i>=pos-1;--i)  
  90.     {  
  91.         pArr->pBase[i+1] = pArr->pBase[i];  
  92.     }  
  93.     pArr->pBase[pos-1] = val;  
  94.     return true;  
  95. }  
  96. bool delete_arr(struct Arr * pArr,int pos,int *pVal)  
  97. {  
  98.     if ( is_empty(pArr) )  
  99.         return false;  
  100.     if (pos<1|| pos>pArr->cnt)  
  101.         return false;  
  102.     *pVal = pArr->pBase[pos-1];  
  103.     for(i=pos; i<pArr->cnt;i++)  
  104.     {  
  105.         pArr->pBase[i-1] = pArr->pBase[i];  
  106.     }  
  107.     pArr->cnt--;  
  108.     return true;  
  109. }  
  110. void inversion_arr(struct Arr * pArr)  
  111. {  
  112.     int i = 0;  
  113.     int j = pArr->cnt-1;  
  114.     int t;  
  115.     while (i<j)  
  116.     {  
  117.         t = pArr->pBase[i];  
  118.         pArr->pBase[i] = pArr->pBase[j];  
  119.         pArr->pBase[j] = t;  
  120.         i++;  
  121.         j--;  
  122.     }  
  123.     return;  
  124. }  
  125. void sort_arr(struct Arr * pArr)  
  126. {  
  127.     int i,j;    //冒泡法  
  128.     for(i=0;i<pArr->cnt;i++)  
  129.     {  
  130.         for(j=i+1;j<pArr->cnt;i++)  
  131.         {  
  132.             if(pArr->pBase[i] > pArr->pBase[j])  
  133.             {  
  134.                 t = pArr->pBase[i];  
  135.                 pArr->pBase[i] = pArr->pBase[j];  
  136.                 pArr->pBase[j] = t;  
  137.             }  
  138.         }  
  139.     }  
  140. }