谁能帮我看看下面的程序问题在哪呀?请大家多多指教!

淅沥加油 2008-10-11 12:19:30
为什么我的插入和删除不能得到正确的结果?

#define MAXSIZE 100
#define ElemType int
typedef struct
{ ElemType elem[MAXSIZE];
int last;
}SeqList;

/*初始化*/
SeqList InitList(SeqList L)
{ L.last=-1;
return(L);
}

/*创建顺序表*/
SeqList Creat(SeqList *L,int n)
{int i;
for(i=0;i<n;i++)
scanf("%3d",&L->elem[i]);
for(i=0;i<n;i++)
printf("%3d",L->elem[i]);
printf("\n");
}
/*排序*/
void arrsort(SeqList *L,int n)
{int i,j,t;
for(i=0;i<n-1;i++)
{for(j=i+1;j<n;j++)
{if (L->elem[i]>L->elem[j])
{t=L->elem[i];
L->elem[i]=L->elem[j];
L->elem[j]=t;
}
}
}
for(i=0;i<n;i++)
printf("%3d",L->elem[i]);
}

/*插入*/

#define OK 1
#define ERROR 0
int InsList(SeqList *L,ElemType e)
{int k,i;
scanf("%3d",&i);
printf("%3d",i);
if((i<1)||(i>L->last+2))
{printf("插入位置i值不合法");
return (ERROR);
}
for (k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);

}

/*删除*/
int DelList(SeqList *L,ElemType *e)
{int k,i;
scanf("%3d",&i);
printf("%3d",i);
if((i<1)||(i>L->last+1))
{printf("删除位置不合法!");
return(ERROR);
}
*e=L->elem[i-1];
for(k=i;i<=L->last;k++)
L->elem[k-1]=L->elem[k];
L->last--;
return(OK);

}


main()
{SeqList L;ElemType e;
int i,m;
m=5;
InitList(L);
Creat(&L,m);
arrsort (&L,m);
Creat(&L,m);
InsList( &L,e);
for(i=0;i<m+1;i++)
printf("%3d",L.elem[i]);
Creat(&L,m);
DelList(&L,&e);
for(i=0;i<m-1;i++)
printf("%3d",L.elem[i]);
}








...全文
171 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
淅沥加油 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 baihacker 的回复:]
问题总结:
create里面的last值
删除里面的循环条件.
主函数里面的e的初始化
链表排序到链表插入演示中没有重新初始化
[/Quote]
是!明白了!
baihacker 2008-10-12
  • 打赏
  • 举报
回复
问题总结:
create里面的last值
删除里面的循环条件.
主函数里面的e的初始化
链表排序到链表插入演示中没有重新初始化
淅沥加油 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kkndciapp 的回复:]
C/C++ code帮你改了下
#include <iostream>
using namespace std;
#define MAXSIZE 100
#define ElemType int
typedef struct
{
ElemType elem[MAXSIZE];
int last;
}SeqList;

/*初始化*/
void InitList(SeqList& L)
{
L.last=-1;
//return(L);
}

/*创建顺序表*/
void Creat(SeqList *L,int n)
{
int i;
for(i=0;i <n;i++)
scanf("%3d",&L->el…
[/Quote]

谢谢指教!
淅沥加油 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 baihacker 的回复:]
引用 7 楼 liuxilil 的回复:
1楼所改的程序我运行了一下,插入和删除还是不可用呀!我每次输入数组都是5 4 3 2 1
运行结果如下
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
2
2 5-858993460 4 3 2 1
5 4 3 2 1
5 4 3 2 1
2
2Press any key to continue
这是什么原因呀?麻烦你再帮我改一下,谢谢了!

因为你插入的值是主函数中的 e的值,而e没有初始化
[/Quote]

再次感谢指教!呵呵……
淅沥加油 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 baihacker 的回复:]
引用 5 楼 liuxilil 的回复:
插入可以用,但是删除还是不可用呀!
当收入要删除第几个数然后按回车就会自动结束程序,除非收入的那个要删除的位置明显不合法才会显示不合法然后正常结束程序.
而且不管是哪一种情况删除函数后面的for(i=0;i <m-1;i++)
printf("%3d",L.elem[i]);
似乎都没有运行!
这是什么原因呀?


for(k=i;i <= L->last;k++)
红色部分应该是i吗?
[/Quote]

明白了!谢谢指教!
baihacker 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liuxilil 的回复:]
1楼所改的程序我运行了一下,插入和删除还是不可用呀!我每次输入数组都是5 4 3 2 1
运行结果如下
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
2
2 5-858993460 4 3 2 1
5 4 3 2 1
5 4 3 2 1
2
2Press any key to continue
这是什么原因呀?麻烦你再帮我改一下,谢谢了!
[/Quote]
因为你插入的值是主函数中的 e的值,而e没有初始化
淅沥加油 2008-10-12
  • 打赏
  • 举报
回复
1楼所改的程序我运行了一下,插入和删除还是不可用呀!我每次输入数组都是5 4 3 2 1
运行结果如下
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
5 4 3 2 1
2
2 5-858993460 4 3 2 1
5 4 3 2 1
5 4 3 2 1
2
2Press any key to continue
这是什么原因呀?麻烦你再帮我改一下,谢谢了!
baihacker 2008-10-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liuxilil 的回复:]
插入可以用,但是删除还是不可用呀!
当收入要删除第几个数然后按回车就会自动结束程序,除非收入的那个要删除的位置明显不合法才会显示不合法然后正常结束程序.
而且不管是哪一种情况删除函数后面的for(i=0;i <m-1;i++)
printf("%3d",L.elem[i]);
似乎都没有运行!
这是什么原因呀?
[/Quote]

for(k=i;i <= L->last;k++)
红色部分应该是i吗?
淅沥加油 2008-10-12
  • 打赏
  • 举报
回复
插入可以用,但是删除还是不可用呀!
当收入要删除第几个数然后按回车就会自动结束程序,除非收入的那个要删除的位置明显不合法才会显示不合法然后正常结束程序.
而且不管是哪一种情况删除函数后面的for(i=0;i <m-1;i++)
printf("%3d",L.elem[i]);
似乎都没有运行!
这是什么原因呀?
kkndciapp 2008-10-11
  • 打赏
  • 举报
回复
帮你改了下
#include <iostream>
using namespace std;
#define MAXSIZE 100
#define ElemType int
typedef struct
{
ElemType elem[MAXSIZE];
int last;
}SeqList;

/*初始化*/
void InitList(SeqList& L)
{
L.last=-1;
//return(L);
}

/*创建顺序表*/
void Creat(SeqList *L,int n)
{
int i;
for(i=0;i <n;i++)
scanf("%3d",&L->elem[i]);
for(i=0;i <n;i++)
printf("%3d",L->elem[i]);
printf("\n");
}
/*排序*/
void arrsort(SeqList *L,int n)
{
int i,j,t;
for(i=0;i <n-1;i++)
{
for(j=i+1;j <n;j++)
{
if (L->elem[i]>L->elem[j])
{
t=L->elem[i];
L->elem[i]=L->elem[j];
L->elem[j]=t;
}
}
}
for(i=0;i <n;i++)
printf("%3d",L->elem[i]);
}

/*插入*/

#define OK 1
#define ERROR 0
int InsList(SeqList *L,ElemType e)
{
int k,i;
scanf("%3d",&i);
printf("%3d",i);
if((i <1)||(i>L->last+2))
{
printf("插入位置i值不合法");
return (ERROR);
}
for (k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);

}

/*删除*/
int DelList(SeqList *L,ElemType *e)
{
int k,i;
scanf("%3d",&i);
printf("%3d",i);
if((i <1)||(i>L->last+1)) //你的这里的last代表什么意思?前面都没有对其进行操作,现在突然出现??值一直为-1??
{printf("删除位置不合法!");
return(ERROR);
}
*e=L->elem[i-1];
for(k=i;i <=L->last;k++)
L->elem[k-1]=L->elem[k];
L->last--;
return(OK);

}


main()
{
SeqList L;ElemType e;
int i,m;
m=5;
InitList(L);
Creat(&L,m);
arrsort (&L,m);
Creat(&L,m);
InsList( &L,e);
for(i=0;i <m+1;i++)
printf("%3d",L.elem[i]);
Creat(&L,m);
DelList(&L,&e);
for(i=0;i <m-1;i++)
printf("%3d",L.elem[i]);
}


有什么要求再提
baihacker 2008-10-11
  • 打赏
  • 举报
回复
/*创建顺序表*/ 
SeqList Creat(SeqList *L,int n)
{int i;
for(i=0;i <n;i++)
scanf("%3d",&L->elem[i]);
for(i=0;i <n;i++)
printf("%3d",L->elem[i]);
printf("\n");
注意一下last的赋值...其它问题上面的已经说过了.
}
jia_xiaoxin 2008-10-11
  • 打赏
  • 举报
回复
改了改,希望对你有帮助

#include "stdio.h"
#define MAXSIZE 100
#define ElemType int
typedef struct
{
ElemType elem[MAXSIZE];
int last;
}SeqList;

/*初始化*/
SeqList InitList(SeqList &L) //此处需要引用参数
{
L.last=-1;
return(L);
}

/*创建顺序表*/
SeqList Creat(SeqList *L,int n)
{
int i;
for(i=0;i <n;i++)
{
scanf("%3d",&L->elem[i]);
L->last++; //此处需要累加
}
for(i=0;i <n;i++)
printf("%3d",L->elem[i]);
printf("\n");
return *L; //这需要返回值
}
/*排序*/
void arrsort(SeqList *L,int n)
{
int i,j,t;
for(i=0;i <n-1;i++)
{
for(j=i+1;j <n;j++)
{
if (L->elem[i]>L->elem[j])
{
t=L->elem[i];
L->elem[i]=L->elem[j];
L->elem[j]=t;
}
}
}
for(i=0;i <n;i++)
printf("%3d",L->elem[i]);
}

/*插入*/

#define OK 1
#define ERROR 0
int InsList(SeqList *L,ElemType e)
{
int k,i;
scanf("%3d",&i);
printf("%3d",i);
if((i <1)||(i>L->last+2)) //此处的L->last未初始化
{
printf("插入位置i值不合法");
return (ERROR);
}
for (k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
L->elem[i-1]=e;
L->last++;
return(OK);

}

/*删除*/
int DelList(SeqList *L,ElemType *e)
{
int k,i;
scanf("%3d",&i);
printf("%3d",i);
if((i <1)||(i>L->last+1))
{
printf("删除位置不合法!");
return(ERROR);
}
*e=L->elem[i-1];
for(k=i;i <=L->last;k++)
L->elem[k-1]=L->elem[k];
L->last--;
return(OK);

}


main()
{
SeqList L;ElemType e = 20;
int i,m;
m=5;
InitList(L);

Creat(&L,m);
arrsort (&L,m);

InitList(L); //需要重新初始化
Creat(&L,m);
InsList( &L,e);
for(i=0;i <m+1;i++)
printf("%3d",L.elem[i]);

InitList(L); //需要重新初始化
Creat(&L,m);
DelList(&L,&e);
for(i=0;i <m-1;i++)
printf("%3d",L.elem[i]);
}
yangkunhenry 2008-10-11
  • 打赏
  • 举报
回复
Mark下,明天搞……

65,211

社区成员

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

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