C代码实现数组

直接上代码,没有什么说的

  1 # include <stdio.h>
  2 # include <malloc.h>
  3 # include <stdlib.h>
  4 
  5 //用C实现数组
  6 
  7 typedef struct Array{
  8     int len;//数组的长度
  9     int* pHead;//数组首地址
 10     int cnt;//数组有效元素个数 
 11 }* PARR,ARR; 
 12 
 13 bool insert(PARR arr,int index,int num);
 14 bool add(PARR arr,int num);
 15 bool isEmpty(PARR arr);
 16 void print(PARR arr);
 17 void initArray(PARR arr,int len);
 18 bool isFull(PARR arr);
 19 bool deleteArr(PARR arr,int index);
 20 void sort(PARR arr);
 21 
 22 int main(void)
 23 {
 24     ARR arr;
 25     initArray(&arr,5);
 26     if(isEmpty(&arr)){
 27         printf("数组为空\n");
 28     }
 29     
 30     add(&arr,111);
 31     add(&arr,2);
 32     add(&arr,33);
 33     add(&arr,4);
 34     add(&arr,5);
 35 //    add(&arr,1);
 36 //    add(&arr,1);
 37     print(&arr);
 38     sort(&arr);
 39     deleteArr(&arr,3);
 40     print(&arr);
 41     
 42     return 0;
 43 }
 44 
 45 //初始化数组
 46 void initArray(PARR arr,int length){
 47     //申请内存
 48     arr->pHead = (int*)malloc(sizeof(int)*length);
 49     if(NULL==arr->pHead){
 50         printf("申请内存失败");
 51         exit(-1);
 52     }
 53     arr->len = length;
 54     arr->cnt = 0;
 55 } 
 56  
 57 //遍历数组
 58 void print(PARR arr){
 59     if(isEmpty(arr)){
 60         printf("数组为空");
 61     }
 62     //for循环打印数组 
 63     for(int i=0; i<arr->cnt; i++){
 64         printf("%d ",arr->pHead[i]);
 65     }
 66     printf("\n");
 67     
 68 }
 69  
 70 //判读数组是否为空
 71 bool isEmpty(PARR arr){
 72     return arr->cnt==0;
 73 }
 74 
 75 //判断数组是否满
 76 bool isFull(PARR arr){
 77     return arr->cnt==arr->len;
 78 }
 79 
 80 //往数组里添加元素
 81 bool add(PARR arr,int num){
 82     if(isFull(arr)){
 83         printf("数组已满");
 84         return false;
 85     }
 86     
 87     arr->pHead[arr->cnt] = num;
 88     arr->cnt++;
 89     return true;
 90 }
 91 
 92 //向数组中插入元素 
 93 bool insert(PARR arr,int index,int num){
 94     if(isFull(arr)){
 95         return false;
 96     }
 97     if(index<1||index>arr->cnt+1){
 98         return false;
 99     }
100     
101     //把index-1之后的数往后移动
102     for(int i=arr->cnt-1; i>=index-1;i--){
103         arr->pHead[i+1] = arr->pHead[i];
104     }
105     
106     arr->pHead[index-1] = num;
107     arr->cnt++;
108     return true;
109 }
110 
111 //删除指定位置的元素
112 bool deleteArr(PARR arr,int index){
113     if(isEmpty(arr)){
114         return false;
115     }
116     if(index<1||index>arr->cnt+1){
117         return false;
118     }
119     
120     for(int i=index; i<arr->cnt;i++){
121         arr->pHead[i-1] = arr->pHead[i];
122     }
123     arr->cnt--;
124     return true;
125 }
126 
127 //排序
128 void sort(PARR arr){
129      
130      int i,j,tem;
131     for(i=0;i<arr->cnt-1;i++) {
132         for(j=0;j<arr->cnt-1-i;j++){
133             if (arr->pHead[j]>arr->pHead[j+1]){
134                 tem = arr->pHead[j];
135                 arr->pHead[j] = arr->pHead[j+1];
136                 arr->pHead[j+1] = tem;
137             }
138         }
139     }
140 } 
141  

 

posted @ 2015-10-05 22:45  卖艺的小流氓  阅读(1123)  评论(0编辑  收藏  举报