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 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 vue2登录调用后端接口如何实现