顺序表的基本操作
来源:互联网 发布:银行卡四件套淘宝网 编辑:程序博客网 时间:2024/05/16 15:37
#include <stdio.h>
typedef struct {
int* address;
int listLength;
int listSize;
}L;
/*
L arrBuild()
{
int* p1=NULL;
int i=0,end=0,temp=0;
L list1={NULL,0,0};
printf("请输入要创建的顺序表的初始元素容量listSize= ");
scanf("%d",&(list1.listSize));
printf("\n");
getchar();
p1=(int*) malloc (list1.listSize*sizeof(int));
if(p1==NULL) exit(-1);
list1.address=p1;
i=0;
printf("请输入一个整型(int)作为结尾标志end=:");
scanf("%d",&end);
printf("\n");
getchar();
printf("请输入一组数据(整型int):");
scanf("%d",&temp);//先缓存到temp中
while( temp!=end)
{
*(p1+i)=temp;
list1.listLength++;
i++;
if( !((list1.listSize-list1.listLength)>=2) )
{
p1=(int*)realloc(p1,(list1.listSize+1)*sizeof(int));
if(p1==NULL) exit(-1);
list1.address=p1;
list1.listSize++;
}
scanf("%d",&temp);
}
fflush(stdin);//getchar();
return list1;
}
void arrInsert(int* p1,int value,int index,int len)
{
int j=len-1;//不是int j=len-2;
while(index<=len-1&&j>=index)
{
*(p1+j+1)=*(p1+j);
j--;
} *(p1+index)=value;
}
void arrDelect(int* p1,int index,int len)
{
//int len=sizeof(p1)/sizeof(int);//2 这样算数组长度是不正确的 sizeof(p1)!=sizeof(arr1)
//printf("数组arr1的长度len=%d\n",len);//测试len
int i=index;
while(i<=len-1)
{
*(p1+i)=*(p1+i+1);
i++;
}
}
void arrSortmaoPao(int*p,int len)
{
int i,j;
for(i=1;i<=len-1;i++)//第i轮
{
for(j=0;j<=len-i-1;j++)
{ int temp;
if( *(p+j)>*(p+j+1) )//小-->大
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
}
int arrSearcherFeng(int* p,int finder,int len)
{ int low=0;
int high=len-1;
int mid=(low+high)/2;
while(low<=high)
{
mid=(low+high)/2;
if(*(p+mid)>finder)
{
high=mid-1;
}
else if(*(p+mid)<finder)
{
low=mid+1;
}
else
{
printf("找到了!在升序数组中%d的位置是%d\n",finder,mid);
break;
}
}
if(finder!=*(p+mid))
{
printf("404NOTFOUND\n");
}
return mid;
}
int main()
{ int i;
char mark='y';
printf("\n");
L list1=arrBuild();
printf("\n");
printf("创建的顺序表:") ;
for(i=0;i<list1.listLength;i++)
{
printf("%5d",*(list1.address+i)) ;
}
//printf("listSize=%d",list1.listSize);
printf("\n\n");
int index,value ;
mark='y';
while(mark=='y'||mark=='Y')
{
M:printf("请输入所增加元素的插入位置 index=");
scanf("%d",&index);
printf("\n");
fflush(stdin); //getchar();
if(index>list1.listLength||index<0)
{
printf("位 置 i 输 入 无 效 !\n");
goto M;
}
printf("请输入所增加的元素的值 value=");
scanf("%d",&value);
printf("\n");
getchar();
arrInsert(list1.address,value,index,list1.listLength);
list1.listLength++;//每插入一个元素后 实际长度+1
printf("在%d处插入%d后新表为: ",index,value);
for(i=0;i<list1.listLength;i++)
{
printf("%5d",*(list1.address+i));
}
printf("\n\n");
B1:printf("是否继续进行该操作(y/n不区分大小写):");
scanf("%c",&mark);
getchar();
printf("\n");
if(mark=='n'||mark=='N') break;
if(mark!='y'&&mark!='Y'&&mark!='n'&&mark!='N')
{
printf("输入无效!\n");
goto B1;
}
}
printf("\n");
mark='y';
while(mark=='y'||mark=='Y')
{
D: printf("请输入要删除的元素的下标位置index= ");
scanf("%d",&index) ;
getchar();
if(index>list1.listLength-1||index<0)
{
printf("位置输入有误!\n\n");
goto D;
}
printf("\n");
arrDelect(list1.address,index,list1.listLength);
list1.listLength--;//*
printf("删除位置%d上的元素后新表为: ",index);
for(i=0;i<list1.listLength-1;i++)
for(i=0;i<list1.listLength;i++)
{
printf("%5d",*(list1.address+i));
}
printf("\n\n");
B2: printf("是否继续进行该操作(y/n不区分大小写):");
scanf("%c",&mark);
getchar();
printf("\n");
if(mark=='n'||mark=='N') break;
if(mark!='y'&&mark!='Y'&&mark!='n'&&mark!='N')
{
printf("输入无效!\n");
goto B2;
}
}
printf("\n");
mark='y';
while(mark=='y'||mark=='Y')
{
int finder;
printf("亲输入要查找的元素发finder= ");
scanf("%d",&finder);
getchar();
printf("\n");
arrSortmaoPao(list1.address,list1.listLength);
arrSearcherFeng(list1.address,finder,list1.listLength) ;
printf(" (注:升序排序后的数组为:)");
for(i=0;i<list1.listLength;i++)
{
printf("%5d",*(list1.address+i));
}
printf("\n\n");
B3: printf("是否继续进行该操作(y/n不区分大小写):");
scanf("%c",&mark);
getchar();
printf("\n");
if(mark=='n'||mark=='N') break;
if(mark!='y'&&mark!='Y'&&mark!='n'&&mark!='N')
{
printf("输入无效!\n");
goto B3;
}
}
printf("\n");
getchar();
return 0;
}
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- iOS delegate、NSNotification效率比较
- BZOJ 2648 SJY摆棋子 KDtree
- UVA-10587 Mayor's Posters verZGC-PJ
- HTML 逆序输出 输出引号
- 文章标题
- 顺序表的基本操作
- Docker 镜像的存储机制
- SonarQube插件开发自定义规则(1)简易demo
- POJ
- Java之多线程Runnable(2)卖烤鸭-yellowcong
- 566. Reshape the Matrix Difficult : Easy
- css之transform篇
- 【LibUIDK界面库系列文章】响应默认按钮
- 用顺序表实现俩有序顺序表拼接后还是有序的