DuanJiaNing_ 2016-03-23 07:07 采纳率: 0%
浏览 1432

线性表出错,找不到原因

#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10

typedef struct
{
char name[10];
char number[20];
}Phonenum;

typedef struct
{
Phonenum *elem;
int length;//当前长度
int listsize;//当前分配的存储容量
}SqList;

void ST(int ts) //出错时指示错误状态
{
if(ts==0)
printf("ERROR!\n\n");
if(ts==-2)
printf("OVERLOW!\n\n");
if(ts==-1)
printf("INFEASIBLE!\n\n");
if(ts==1);
else;
}

int InitList(SqList &L)//初始化
{
L.elem=(Phonenum *)malloc(LIST_INIT_SIZE*sizeof(Phonenum));
if(!L.elem) exit(OVERFLOW);
L.listsize=LIST_INIT_SIZE;
L.length=0;
return OK;
}

int Build(SqList &L)//建立表
{
int i,n;
printf("请初始化n个人的电话信息:\n");
scanf("%d",&n);
if(n>LIST_INIT_SIZE)//如果n大于当前空间
{
L.elem=(Phonenum *)realloc(L.elem,(n+LISTINCREMENT)*sizeof(Phonenum));
if(!L.elem)
exit(OVERFLOW);
L.listsize=n+LISTINCREMENT;
}
printf("请输依次输入%d人的姓名和电话号码\n",n);
for(i=0;i {
printf("第%d个:",i+1);
scanf("%s %s",(L.elem+i)->name,(L.elem+i)->number);
}
printf("\n");
L.length=n;
return OK;
}

void Print(SqList &L)//输出表中元素
{
int i;
for(i=0;i printf("%d号位置: %s %s\n",i+1,(L.elem+i)->name,(L.elem+i)->number);
printf("\n");
}

void Tips()//提示函数
{
printf("选择编号以执行对应操作:\n");
printf("1 输出\n");
printf("2 删除给定位置i数据\n");
printf("3 在i位置处插入信息\n");
printf("0 退出\n\n");
}

int ListDelete(SqList &L,int i)//删除第i个元素
{
int x;
if(i=L.length)
return ERROR;
for(x=i+1;x<L.length;x++)
(L.elem+x-1)=(L.elem+x);
L.length--;
printf("成功删除信息!\n\n");
return OK;
}

int ListInsert(SqList &L,int i,SqList &X)//插入一个人的信息在位置i处,使仍然有序
{
int k;
if(L.length=L.listsize) //判断线性表是否已满
{
L.elem=(Phonenum )realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(Phonenum));
if(!L.elem) //若再分配失败
exit(OVERFLOW);
L.listsize+=LISTINCREMENT;
}
for(k=L.length;k>i;k--)
{
strcpy((
(L.elem+k)).name,(*(L.elem+k-1)).name);
strcpy((*(L.elem+k)).number,(*(L.elem+k-1)).number);
}
strcpy((L.elem+i)->name,X.elem->name);
strcpy((L.elem+i)->number,X.elem->number);
L.length++;
printf("成功插入!\n");
return OK;
}

int main()
{
Phonenum xx;
int op,x;
SqList L,i;
InitList(L);//初始化
Build(L);//建立表
Tips();
scanf("%d",&op);
while(op)
{
switch(op)
{
case 1:
Print(L);
break;
case 2:
printf("请输入要删除的位置i:\n");
scanf("%d",&x);
ST(ListDelete(L,x-1));//第i个元素对应的下标为i-1
break;
case 3:
printf("请输入要插入的位置:\n");
scanf("%d",&i);
printf("请输依次输入姓名和电话号码\n");
scanf("%s %s",xx.name,xx.number);
ST(ListInsert(L,i,xx));

break;
case 0:
exit(OK);
}
Tips();
scanf("%d",&op);
}
return 0;
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-03-23 07:32
    关注
     这代码编译都不能编译
    ListInsert(L,i,xx)
    xx是Phonenum,而你的函数原型
    int ListInsert(SqList &L,int i,SqList &X)
    最后一个参数是SqList
    
    评论

报告相同问题?

悬赏问题

  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))