#include<stdio.h>
#include<stdlib.h>
struct Arr{
int * pbase;//数组首地址
int len;//数组所能容纳的总长度
int cnt;//数组有效个数;
int increment;//内存增长因子
};
void init(struct Arr *parr,int len);
bool append(struct Arr *parr,int content);
bool append_auto(struct Arr *parr,int content);
bool insert(struct Arr *parr,int pos,int content);
bool delet(struct Arr *parr,int pos,int * deledata);
//int get();
bool sortAsc_arr(struct Arr *parr);
void show_arr(struct Arr *arr);
bool isEmpty(struct Arr *arr);
bool isFull(struct Arr *arr);
bool converse(struct Arr *parr);
void newrealloc(struct Arr *parr);
int main(){
struct Arr arr;
int deledata;
init(&arr,3);
append_auto(&arr,4);
append_auto(&arr,5);
append_auto(&arr,6);
append_auto(&arr,7);
// append(&arr,8);
// append(&arr,9);
insert(&arr,2, 30);//在pos位置插入数据,pos从1开始
printf("所有数据:");
show_arr(&arr);
if(delet(&arr,3,&deledata)){
printf("删除元素为:%d\n",deledata);
}
printf("删除后剩余数据:");
show_arr(&arr);
converse(&arr);
printf("倒置后的数据:");
show_arr(&arr);
printf("升序排序后的数据:");
sortAsc_arr(&arr);
show_arr(&arr);
return 0;
}
void init(struct Arr *parr,int len){
parr->pbase=(int *)malloc(sizeof(int)*len);
if((*parr).pbase==NULL){
printf("内存分配失败!");
exit(-1);
}else{
parr->cnt=0;
parr->len=len;
}
return;
}
bool isFull(struct Arr *parr){
if(parr->cnt==(*parr).len)
return true;
else
return false;
}
bool isEmpty(struct Arr *parr){
if(parr->cnt==0)
return true;
else
return false;
}
void show_arr(struct Arr * parr){
if(isEmpty(parr)){
printf("数组数据为空!\n");
}else
for(int j=0;j<parr->cnt;j++){
printf("%3d",(parr->pbase)[j]);
}
printf("\n");
}
//添加数据
bool append(struct Arr * parr,int content){
if(isFull(parr))
return false;
else{
int cnt=parr->cnt;
parr->pbase[cnt]=content;
parr->cnt=cnt+1;
}
return true;
}
bool append_auto(struct Arr *parr,int content){
if(isFull(parr)){
parr->increment=2;
newrealloc(parr);
}
int cnt=parr->cnt;
parr->pbase[cnt]=content;
parr->cnt=cnt+1;
return true;
}
bool insert(struct Arr * parr,int pos,int content){
/* if(isFull(aprr))
{
printf("数组已满");
return false;
}else {
for(int i=(parr->cnt)-1;i>=pos-1;i--){
(parr->pbase)[i+1]=parr->pbase[i]
}
}
*/
if(isFull(parr))
return false;
if(pos<1||pos>parr->cnt+1){
printf("不符合插入要求");
return false;
} else{
for(int i=parr->cnt-1;i>=pos-1;i--){
parr->pbase[i+1]=parr->pbase[i];
}
parr->pbase[pos-1]=content;
parr->cnt=parr->cnt+1;
}
return true;
}
bool delet(struct Arr * parr,int pos,int * deledata){
if(isEmpty(parr))
return false;
if(pos<1||pos>parr->len){
printf("删除的位置不正确");
return false;
}else{
*deledata=parr->pbase[pos-1];
for(int i=pos;i<parr->cnt;i++)
parr->pbase[i-1]=parr->pbase[i];
}
parr->cnt=parr->cnt-1;
return true;
}
bool converse(struct Arr *parr ){
if(isEmpty(parr)){
printf("没有数据不能倒置");
return false;
}
int i=0;
int j=parr->cnt-1;
while(i<j){
int mid=parr->pbase[i];
parr->pbase[i]=parr->pbase[j];
parr->pbase[j]=mid;
i++;
j--;
}
return true;
}
bool sortAsc_arr(struct Arr *parr){
if(isEmpty(parr))
return false;
int middata,i,j;
for( i=0;i<parr->cnt-1;i++){
for( j=i+1;j<parr->cnt;j++){
if(parr->pbase[i]>=parr->pbase[j]){
middata=parr->pbase[i];
parr->pbase[i]=parr->pbase[j];
parr->pbase[j]=middata;
}
}
}
return true;
}
void newrealloc(struct Arr *parr){
if(parr->cnt==parr->len){
parr->pbase=(int *)realloc(parr->pbase,sizeof(int)*(parr->len)*(parr->increment));
parr->len=(parr->increment)*(parr->len);
}
if(parr->pbase==NULL)
{
printf("内存分配失败");
exit(1);
}
return;
}
#include<stdlib.h>
struct Arr{
int * pbase;//数组首地址
int len;//数组所能容纳的总长度
int cnt;//数组有效个数;
int increment;//内存增长因子
};
void init(struct Arr *parr,int len);
bool append(struct Arr *parr,int content);
bool append_auto(struct Arr *parr,int content);
bool insert(struct Arr *parr,int pos,int content);
bool delet(struct Arr *parr,int pos,int * deledata);
//int get();
bool sortAsc_arr(struct Arr *parr);
void show_arr(struct Arr *arr);
bool isEmpty(struct Arr *arr);
bool isFull(struct Arr *arr);
bool converse(struct Arr *parr);
void newrealloc(struct Arr *parr);
int main(){
struct Arr arr;
int deledata;
init(&arr,3);
append_auto(&arr,4);
append_auto(&arr,5);
append_auto(&arr,6);
append_auto(&arr,7);
// append(&arr,8);
// append(&arr,9);
insert(&arr,2, 30);//在pos位置插入数据,pos从1开始
printf("所有数据:");
show_arr(&arr);
if(delet(&arr,3,&deledata)){
printf("删除元素为:%d\n",deledata);
}
printf("删除后剩余数据:");
show_arr(&arr);
converse(&arr);
printf("倒置后的数据:");
show_arr(&arr);
printf("升序排序后的数据:");
sortAsc_arr(&arr);
show_arr(&arr);
return 0;
}
void init(struct Arr *parr,int len){
parr->pbase=(int *)malloc(sizeof(int)*len);
if((*parr).pbase==NULL){
printf("内存分配失败!");
exit(-1);
}else{
parr->cnt=0;
parr->len=len;
}
return;
}
bool isFull(struct Arr *parr){
if(parr->cnt==(*parr).len)
return true;
else
return false;
}
bool isEmpty(struct Arr *parr){
if(parr->cnt==0)
return true;
else
return false;
}
void show_arr(struct Arr * parr){
if(isEmpty(parr)){
printf("数组数据为空!\n");
}else
for(int j=0;j<parr->cnt;j++){
printf("%3d",(parr->pbase)[j]);
}
printf("\n");
}
//添加数据
bool append(struct Arr * parr,int content){
if(isFull(parr))
return false;
else{
int cnt=parr->cnt;
parr->pbase[cnt]=content;
parr->cnt=cnt+1;
}
return true;
}
bool append_auto(struct Arr *parr,int content){
if(isFull(parr)){
parr->increment=2;
newrealloc(parr);
}
int cnt=parr->cnt;
parr->pbase[cnt]=content;
parr->cnt=cnt+1;
return true;
}
bool insert(struct Arr * parr,int pos,int content){
/* if(isFull(aprr))
{
printf("数组已满");
return false;
}else {
for(int i=(parr->cnt)-1;i>=pos-1;i--){
(parr->pbase)[i+1]=parr->pbase[i]
}
}
*/
if(isFull(parr))
return false;
if(pos<1||pos>parr->cnt+1){
printf("不符合插入要求");
return false;
} else{
for(int i=parr->cnt-1;i>=pos-1;i--){
parr->pbase[i+1]=parr->pbase[i];
}
parr->pbase[pos-1]=content;
parr->cnt=parr->cnt+1;
}
return true;
}
bool delet(struct Arr * parr,int pos,int * deledata){
if(isEmpty(parr))
return false;
if(pos<1||pos>parr->len){
printf("删除的位置不正确");
return false;
}else{
*deledata=parr->pbase[pos-1];
for(int i=pos;i<parr->cnt;i++)
parr->pbase[i-1]=parr->pbase[i];
}
parr->cnt=parr->cnt-1;
return true;
}
bool converse(struct Arr *parr ){
if(isEmpty(parr)){
printf("没有数据不能倒置");
return false;
}
int i=0;
int j=parr->cnt-1;
while(i<j){
int mid=parr->pbase[i];
parr->pbase[i]=parr->pbase[j];
parr->pbase[j]=mid;
i++;
j--;
}
return true;
}
bool sortAsc_arr(struct Arr *parr){
if(isEmpty(parr))
return false;
int middata,i,j;
for( i=0;i<parr->cnt-1;i++){
for( j=i+1;j<parr->cnt;j++){
if(parr->pbase[i]>=parr->pbase[j]){
middata=parr->pbase[i];
parr->pbase[i]=parr->pbase[j];
parr->pbase[j]=middata;
}
}
}
return true;
}
void newrealloc(struct Arr *parr){
if(parr->cnt==parr->len){
parr->pbase=(int *)realloc(parr->pbase,sizeof(int)*(parr->len)*(parr->increment));
parr->len=(parr->increment)*(parr->len);
}
if(parr->pbase==NULL)
{
printf("内存分配失败");
exit(1);
}
return;
}