昨晚听了郝斌老师的数据结构的第一个部分-----连续存储数组的算法演示,郝斌老师很负责任的写了很多代码,今天上午跟中午我来自己去实现下,在实现的同时我参考了@hacke2的这篇博文http://blog.csdn.net/hacke2/article/details/7217003。先分享代码如下:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
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(struct Arr *pArr,int pos);
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 inversion_arr(struct Arr *pArr); //倒置
int main()
{
struct Arr arr;
int pval,val;
init_arr(&arr,6);
show_arr(&arr);
append_arr(&arr,1);
append_arr(&arr,2);
show_arr(&arr);
insert_arr(&arr,2,3);
show_arr(&arr);
//delete_arr(&arr,3,&pval);
inversion_arr(&arr);
//sort_arr(&arr);
show_arr(&arr);
val=get(&arr,3);
printf("您取的数是:%d\n",val);
return 0;
}
void init_arr(struct Arr *pArr,int length)
{
pArr->pBase=(int*)malloc(sizeof(int)*length);
if(NULL==pArr->pBase)
{
printf("malloc fail\n");
exit(-1);
}
else
{
pArr->len=length;
pArr->cnt=0;
}
return ;
}
bool is_empty(struct Arr *pArr)
{
if(0 == pArr->cnt)
return true;
else
return false;
}
bool is_full(struct Arr *pArr)
{
if(pArr->cnt==pArr->len)
return true;
else
return false;
}
void show_arr(struct Arr *pArr)
{
if( is_empty(pArr) )
{
printf("is empty\n");
}
else
{
int i;
for(i=0;i<pArr->cnt;i++)
{
printf("%d ",pArr->pBase[i]);
}
printf("\n");
}
}
bool append_arr(struct Arr *pArr,int val)
{
if(is_full(pArr))
return false;
else
pArr->pBase[pArr->cnt]=val;
pArr->cnt++;
return true;
}
bool insert_arr(struct Arr *pArr,int pos,int val)
{
int i;
if(pos>pArr->len || pos<1)
return false;
else
for(i=pArr->cnt;i>=pos;--i)
{
//printf("%d\n",pArr->cnt);
pArr->pBase[i]=pArr->pBase[i-1];
}
pArr->pBase[pos-1]=val;
pArr->cnt++;
return true;
}
bool delete_arr(struct Arr * pArr,int pos,int *pVal)
{
if ( is_empty(pArr) )
return false;
if (pos<1|| pos>pArr->cnt)
return false;
*pVal = pArr->pBase[pos-1];
for(int i=pos; i<pArr->cnt;i++)
{
pArr->pBase[i-1] = pArr->pBase[i];
}
pArr->cnt--;
return true;
}
void inversion_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--;
// }
/*下面这段代码与while那段代码功能一样*/
for(;i<j;i++,j--)
{
t=pArr->pBase[i];
pArr->pBase[i]=pArr->pBase[j];
pArr->pBase[j]=t;
}
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;
}
}
}
return ;
}
int get(struct Arr *pArr,int pos)
{
if(pos<1 || pos>pArr->cnt)
printf("您取错数了c\n");
else
return pArr->pBase[pos-1];
}