线性表插入和查找实现不了,求大神帮助

qq_40103631 2017-09-04 10:37:36
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100


typedef struct
{
double element[MAXSIZE];
int last;
}SequenceList;

void InitList(SequenceList * L); //初始化线性表
void DestroyList(SequenceList * L); //销毁线性表
void ClearList(SequenceList * L); //清空线性表
int EmptyList(SequenceList * L); //判断是否是空表
int ListLingth(SequenceList * L); //求表长
int locate(SequenceList * L,double e); //定位e的位置
double GetList(SequenceList * L, int i); //输出表中元素
void InsList(SequenceList * L, int i, double e);
void DelList(SequenceList * L, int i, double * e);
void MergeList(SequenceList * LA,SequenceList * LB,SequenceList * LC );
void DispList(SequenceList * L);
void input(SequenceList * L);
//此函数可以不做
void InitList(SequenceList * L)
{
int i = 0;
L->last = 0;
for(i = 0; i < MAXSIZE;i++)
{
L->element[i] = 0;
}
}
void DestroyList(SequenceList * L)
{

}
void ClearList(SequenceList * L)
{
int i = 0;
L->last = 0;
for(i = 0; i < MAXSIZE;i++)
{
L->element[i] = 0;
}
}

int EmptyList(SequenceList * L)
{
return L->last == 0;
}

int ListLingth(SequenceList * L)
{
return L->last;
}

int locate(SequenceList * L,double e)
{
int i = 0;
for(i = 0; i < L->last;i++)
{
if(L->element[i] == e)
return i + 1; //普通人类使用
}
return -1;
}

double GetList(SequenceList * L, int i) //取
{
if(i - 1 > L->last)
{
printf("无该数据。\n\a");
return 0;
}
return L->element[i - 1];
}

void InsList(SequenceList * L, int i, double e)
{
int k = 0;
if(i < 1 || i > L->last + 2)
{
printf("顺序表已满,不能添加新数据。\n");
return;
}
for(k = L->last; k > i - 1;k--)
{
L->element[k] = L->element[k + 1];
}
L->element[i - 1] = e;
L->last++;
}

void DelList(SequenceList * L, int i, double * e)
{
int k = 0;
if(i < 1 || i > L->last + 1)
{
printf("删除位置不合法。\n");
return;
}
* e = L->element[i - 1];
for(k = i - 1; k < L->last;k++)
{
L->element[k] = L->element[k + 1];
}
L->last--;
}
void DispList(SequenceList * L){ //显示线性表
int i = 0;

printf("[");
for(i = 0;i < L->last;i++){
if(i == L-> last - 1 )
printf("%.2lf",L->element[i]);
else
printf("%.2lf,",L->element[i]);
}
printf("]");
}
void input(SequenceList * L){ //输入线性表
int i = 0;
printf("请输入顺序表大小:");
scanf("%d",&L->last);
printf("依次输入顺序表的值:\n");
for(i=0;i< L->last;i++)
{
scanf("%lf",&L->element[i]); //向数组中每个元素输入数据
}
}
void MergeList(SequenceList * LA,SequenceList * LB,SequenceList * LC )
{
int i = 0;
int j = 0;
int k = 0;
int l = 0;
for(k = 0;i <= LA->last && j <= LB->last;k++)
{
if(LA->element[i] <= LB->element[j])
{
LC->element[k] = LA->element[i];
i++;
}
else
{
LC->element[k] = LB->element[j];
j++;
}
}
l = k;
if(LA->last > LB->last)

for(k = l;i <= LA->last;k++)
{
LC->element[k] = LA->element[i];
i++;
}
else
for(k = l;i <= LB->last;k++)
{
LC->element[k] = LB->element[i];
i++;
}


LC->last = LA->last + LB->last + 1;
}
void main()
{
SequenceList LA,LB,LC;
SequenceList L;
int choice;
int i = 0;
int index;
double e;
char choice2 = 'n';
do{
printf("请选择: \n1、输入 2、输出 3、初始化 4、获得值个数 5、查找值 6、插入值 7、删除值 8、确认值位置 9、摧毁 10、清空 11、查看是否清空 12、合并线性表0、退出\n");
scanf("%d",&choice);
switch(choice){
case 1:
input(&L); //输入线性表
break;
case 2:
DispList(&L); //输出线性表
break;
case 3:
InitList(&L); //初始化线性表
printf("初始化完毕。\n");
break;
case 4:
printf("%d\n",ListLingth(&L)); //显示线性表长度
break;
case 5: //查找线性表值
printf("请输入要查找的值的位置:");
scanf("%d",&i);
printf("%.2f",GetList(&L,i));
printf("\n");
break;
case 6: //插入值
printf("请输入要插入的位置:");
scanf("%d",&i);
printf("请输入要插入的值:");
scanf("%.2lf",&e);
InsList(&L,i,e);
printf("插入完毕。\n");
break;
case 7: //删除值
printf("请输入要删除的值得位置:");
scanf("%d",&i);
i--;
DelList(&L,i,&e);
printf("删除完毕。\n");
break;
case 8: //查找值
printf("请输入要查找的值:");
scanf("%d",&e);
index = locate(&L,e);
if(index != 0)
printf("true");
printf("%d",index);
printf("\n");
break;
printf("false");
printf("\n");
break;
case 9: //摧毁线性表
DestroyList(&L);
printf("摧毁完毕。\n");
break;
case 10: //清空线性表
ClearList(&L);
printf("清空完毕。\n");
break;
case 11: //确认是否清空线性表
index = EmptyList(&L);
if(index == 0)
printf("false\n");
else
printf("true\n");
break;
case 12:
InitList(&LA);
InitList(&LB);

InsList(&LA, 1, 1);
InsList(&LA, 2, 2);
InsList(&LA, 3, 3);
InsList(&LB, 1, 1);
InsList(&LB, 2, 2);
InsList(&LB, 3, 3);
InsList(&LB, 4, 4);

DispList(&LA);
printf("\n");
DispList(&LB);
printf("\n");
MergeList(&LA, &LB, &LC);
DispList(&LC);
break;
default:
printf("暂无该功能!\n");
break;
}
}while(choice != 0);
printf("谢谢使用!");

}
...全文
144 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-09-05
  • 打赏
  • 举报
回复
百度搜相关关键字。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧