线性结构---连续存储[数组]

来源:互联网 发布:ios wkwebview js弹窗 编辑:程序博客网 时间:2024/05/21 09:03

郝斌老师---------连续存储【数组】

#include<stdio.h>#include<malloc.h>#include<stdlib.h>    //包含了exit//定义了一个数组类型struct Arr{int *pBase;   //存储数组元素的第一个元素的地址int len ;     //数组能容纳的最大元素个数int cnt;      //当前数组有效元素个数} ;void  init_arr(struct Arr *pArr,int length);bool  append_arr(struct Arr *pArr,int val);bool  insert_arr(struct Arr *pArr,int pos,int val);bool  delete_arr(struct Arr *pArr,int pos,int *pVal);int   get();bool  is_empty(struct Arr *pArr);bool  is_full(struct Arr *pArr);void  sort_arr(struct Arr *pArr);void  show_arr(struct Arr *pArr);void  inverse_arr(struct Arr *pArr);void main(){struct Arr arr;int val;init_arr(&arr,6);show_arr(&arr);append_arr(&arr,1);append_arr(&arr,4);append_arr(&arr,2);append_arr(&arr,5);    printf("追加数组元素:");show_arr(&arr);printf("\n");insert_arr(&arr,2,9); printf("插入后的数组元素:");show_arr(&arr);printf("\n");   if(delete_arr(&arr,2,&val)){printf("删除成功!\n");printf("删除的元素是:%d\n",val);}else{printf("删除失败!\n");}printf("删除后的数组元素:");show_arr(&arr);printf("\n"); if(append_arr(&arr,8)){printf("追加成功!\n");printf("追加成功后的元素:");}else{printf("追加失败!\n");}show_arr(&arr);  printf("\n");inverse_arr(&arr);    printf("倒置后的元素:");    show_arr(&arr);   printf("\n");   sort_arr(&arr);   printf("排序后的元素:");   show_arr(&arr);   printf("\n");}void init_arr(struct Arr *pArr,int length){pArr->pBase=(int *)malloc(sizeof(int)*length);if(NULL==pArr->pBase){printf("动态内存分配失败!\n");exit(-1);    //终止整个程序}else{pArr->len=length;pArr->cnt=0;}return ;}void  show_arr(struct Arr *pArr){if(is_empty(pArr))   {printf("数组为空!\n");}else{for(int i=0 ; i < pArr->cnt ; ++i)printf("%d ",pArr->pBase[i]);printf("\n");}}bool  is_empty(struct Arr *pArr){if(pArr->cnt==0)return true;elsereturn false;}bool  is_full(struct Arr *pArr){if(pArr->cnt==pArr->len)return true;elsereturn false;}bool  append_arr(struct Arr *pArr,int val){//满时返回falseif(is_full(pArr))return false;    //不满时追加pArr->pBase[pArr->cnt]=val;(pArr->cnt)++;return true;}bool  insert_arr(struct Arr *pArr,int pos,int val){//从最后一个元素往后移int i;if(is_full(pArr))return false;if(pos < 1 || pos > pArr->cnt+1)return false;for(i=pArr->cnt-1;i>=pos-1;--i){pArr->pBase[i+1]=pArr->pBase[i];}pArr->pBase[pos-1]=val;pArr->cnt ++;return true;}bool  delete_arr(struct Arr *pArr,int pos,int *pVal){int i;if(is_empty(pArr))return false;if(pos<1 || pos>pArr->cnt)return false;*pVal=pArr->pBase[pos-1];for(i=pos;i<pArr->cnt;++i){pArr->pBase[i-1]=pArr->pBase[i];}pArr->cnt --;return true;}void  inverse_arr(struct Arr *pArr){int i=0;int j=pArr->cnt-1;int t;while(i<j){t=pArr->pBase[i];pArr->pBase[i]=pArr->pBase[j];pArr->pBase[j]=t;++i;--j;}return ;}void  sort_arr(struct Arr *pArr){int i,j,t;for(i=0;i<pArr->cnt;++i){for(j=i+1;j<pArr->cnt;++j){if(pArr->pBase[i]>pArr->pBase[j]){t=pArr->pBase[i];pArr->pBase[i]=pArr->pBase[j];pArr->pBase[j]=t;}}}}


0 0
原创粉丝点击