现在的位置: 首页 > 综合 > 正文

顺序表的相关操作

2013年10月08日 ⁄ 综合 ⁄ 共 3204字 ⁄ 字号 评论关闭

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

struct Arr
{
int * Base;//存储数组第一个元素的地址
int len ;//数组长度
int size;  //数组当前长度

};
void init_arr(struct Arr * pArr,int length);
bool append_arr(struct Arr * pArr,int val); //追加val值
bool insert_arr(struct Arr * pArr,int pos,int *pVal);
bool delete_arr(struct Arr * pArr,int pos,int *pVal);
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 main(void)
{
int i;
int len;
int val;//加入数据的值
int val_ins;//插入数据的值
int pos; //插入数据的位置
int del;//返回删除数据的值
struct Arr arr;
while(1){
printf("初始化数组请输入 1\n");
printf("加入数据请输入   2\n");
printf("插入数据请输入   3\n");
printf("删除数据请输入   4\n");
printf("给数组排序请输入 5\n");

    scanf("%d",&i);
printf("\n\n\n");
if(1==i){
printf("请输入要创建的数组长度\n\n");
scanf("%d",&len);
init_arr(&arr,len);


}
else if(2==i){

      printf("请输入要加入数据的值\n\n\n");

 scanf("%d",&val);
 append_arr(&arr,val);
 printf("当前数组中的内容为\n\n\n");
 show_arr(&arr);
 printf("\n\n\n");

}
else if(3==i){
printf("请输入要插入数据的位置\n\n");
scanf("%d",&pos);
printf("请输入要插入数据的值\n\n");
scanf("%d",&val_ins);
insert_arr(&arr,pos,&val_ins);
printf("当前数组中的内容为\n\n\n");
show_arr(&arr);
 printf("\n\n\n");


}
else if(4==i){
printf("请输入要删除数据的位置\n\n\n");
scanf("%d",&pos);


   delete_arr(&arr,pos,&del);
printf("当前数组中的内容为\n\n\n");
show_arr(&arr);
printf("删除的数据为%d\n",del);
 printf("\n\n\n");


}
else if(5==i)
{

sort_arr(&arr);
printf("当前数据为\n");
show_arr(&arr);
}
else {
printf("输入有误 请重新输入\n");

}

}
}

void init_arr(struct Arr * pArr,int length)
{
pArr->Base=(int*)malloc(sizeof(int)*length);
if(pArr->Base==NULL)
{    printf("\n\n\n");
printf("分配失败\n");
    exit(-1);  //终止程序

}
else
{
pArr->len=length;  
pArr->size=0; //初始长度为0
  printf("\n\n\n");
printf("分配成功\n\n\n");
}

}

void show_arr(struct Arr * pArr)  //输出函数
{
int i;
for(i=0;i<pArr->size;i++)
{
printf("%d ",pArr->Base[i]);

}
printf("\n");
}

bool append_arr(struct Arr * pArr,int val)  //在数组末尾追加数据
{
if(pArr->size>=pArr->len)
{  printf("追加失败,超过数组大小\n");
  return false;
}
else
{
pArr->Base[pArr->size]=val;
pArr->size++;
return true;
}
}

bool insert_arr(struct Arr * pArr,int pos,int *pVal) //在第pos位置处插入pval所指向的值  pos 从1开始
{
int i=0;

if(pArr->size>=pArr->len)
{
printf("数组已满,不能插入\n");
return false;
}
if(pos<1||pos>pArr->size)
{
printf("输入位置值非法\n");
return false;
}
for(i=pArr->size;i>=pos;i--)
{
pArr->Base[i]=pArr->Base[i-1];
}
pArr->Base[pos-1]=*pVal;
pArr->size++;
return true;
}

bool delete_arr(struct Arr * pArr,int pos,int *pVal)  //删除第pos个位置上的值,并用 pval返回

{
if(pos<1||pos>pArr->size)
{
printf("输入值非法\n");
return false;
}
if(is_empty(pArr))
{
printf("无数据可删\n");
return false;
}
else
{
*pVal=pArr->Base[pos-1];
for(int i=pos;i<=pArr->size-1;i++)
{
pArr->Base[i-1]=pArr->Base[i];

}
pArr->size--;
printf("删除的元素为%d\n",*pVal);
return true;
}
}

bool is_empty(struct Arr * pArr)//判断数组是否为空
{
if(pArr->size==0)

return true;

else 

return false;

}

bool is_full(struct Arr * pArr)  //判断数组是否满
{
if(pArr->size==pArr->len)
{
printf("数组已满,请重新分配\n");
return true;
}
else return false;
}

void sort_arr(struct Arr * pArr) //给数组排序
{int i;
int temp; //保存临时数据
int j,k;
printf("请输入排序顺序\n");
printf("升序请输入 1\n");
printf("降序请输入 2\n");
scanf("%d",&i);
if(1==i)
{
for (j=0;j<pArr->size;++j)
{
for(k=j+1;k<pArr->size;++k)
{
if(pArr->Base[j]>pArr->Base[k])
{
temp=pArr->Base[j];
pArr->Base[j]=pArr->Base[k];
pArr->Base[k]=temp;
}

}
}

}
else if (2==i)
{
for (j=0;j<pArr->size;++j)
{
for(k=j+1;k<pArr->size;++k)
{
if(pArr->Base[j]<pArr->Base[k])
{
temp=pArr->Base[j];
pArr->Base[j]=pArr->Base[k];
pArr->Base[k]=temp;
}

}
}
}

else 
{

printf("输入有误\n");
}

}

抱歉!评论已关闭.