为什么我的插入和删除的输出不正确呢 求帮助啊~
# define INCREMENT 5# define ERROR -1
# define LISTSIZE 10
# include<stdio.h>
# include<stdlib.h>
typedef struct{
int *data;
int length;
int listsize;
}Seqlist;
int Initial(Seqlist *L)
{
L->data=(int*)malloc(LISTSIZE*sizeof(int));
if(!(L->data))
return ERROR;
L->length=0;
L->listsize=LISTSIZE;
}
void creat(Seqlist *L)
{
int a,i;
printf("请输入要创建的元素个数: ");
scanf("%d",&a);
for(i=0;i<a;i++)
{
printf("第%d个元素为:",i+1);
scanf("%d",&L->data);
L->length++;
}
}
void show(Seqlist *L)
{
int i;
printf("线性表中的元素为:");
for(i=0;i<L->length;i++)
printf("%d ",L->data);
printf("\n");
}
int getelem(Seqlist *L)
{
int i;
printf("请输入你需要查找第几号元素:");
scanf("%d",&i);
printf("您查询的结果是:%d\n",L->data);
}
int listinsert(Seqlist *L,int i,int e)
{
int j;
if(i<1||i>L->length+1)
return ERROR;
else if(L->length=LISTSIZE)
return ERROR;
else
{
for(j=L->length-1;j>=i-1;j--)
L->data=L->data;
L->data=e;
L->length++;
return 0;
}
}
int listdelete(Seqlist *L,int i,int e)
{
int j;
e=L->data;
if(i<1||i>L->length)
return ERROR;
else
{
for(j=i;j<=L->length-1;j++)
L->data=L->data;
L->length--;
}
return 0;
}
int main()
{
Seqlist L;
int a;
Initial(&L);
creat(&L);
show(&L);
getelem(&L);
listinsert(&L,2,a);
show(&L);
listdelete(&L,2,a);
show(&L);
putchar('\n');
return 0;
} 看了你的代码真会把人搞晕。我只能说是神一样的代码。。。
简单说下
L->data=(int*)malloc(LISTSIZE*sizeof(int)); // 分配了10个int大小的空间
// 下面确可以无限输入
void creat(Seqlist *L)
{
int a,i;
printf("请输入要创建的元素个数: ");
scanf("%d",&a);
for(i=0;i<a;i++)
{
printf("第%d个元素为:",i+1);
scanf("%d",&L->data);
L->length++;
}
}
建议:::你线性不是线性表(顺序表),搞不懂是什么玩意,看的人越看越蒙。你再仔细看看教程加深巩固基础 我的怎么就不是顺序表了...
ba21 发表于 2018-3-22 23:12
看了你的代码真会把人搞晕。我只能说是神一样的代码。。。
简单说下
L->data=(int*)malloc(LISTSIZE*siz ...
而且我输入顺序表的是输出它的表长啊...为什么会错... 愿你 发表于 2018-3-23 08:35
我的怎么就不是顺序表了...
你怎么就是顺序表了。你自定义的自认为是,那我也无话可说。喊你再仔细看看教程;对我可没有好处。 int listinsert(Seqlist *L,int i,int e)
{
int j;
if(i<1||i>L->length+1)
return ERROR;
else if(L->length=LISTSIZE) //这行写错了吧。应该是==
return ERROR;
else
{
for(j=L->length-1;j>=i-1;j--) //L->length就行
L->data=L->data;
L->data=e; //这个是 i 吧
L->length++;
return 0;
}
}
ba21 发表于 2018-3-23 12:31
你怎么就是顺序表了。你自定义的自认为是,那我也无话可说。喊你再仔细看看教程;对我可没有好处。
你说话语气也用不着这么冲啊 不懂才问的好吧 songqiang 发表于 2018-3-23 17:14
int listinsert(Seqlist *L,int i,int e)
{
int j;
数组下标不是要减1吗 所以我就都减了 ba21 发表于 2018-3-23 12:31
你怎么就是顺序表了。你自定义的自认为是,那我也无话可说。喊你再仔细看看教程;对我可没有好处。
我依旧觉得我这个帖子的线性表没有太大问题啊。
我今天又编写了一遍 结果都出来了,但我今天只是在这个基础上进行修改而已。
所以 还请你告诉我 我哪里需要改进{:10_297:}
# define ERROR -1
# define LISTSIZE 5
# include<stdio.h>
# include<stdlib.h>
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
int initlist(Sqlist *L) //初始化顺序表
{
L->elem=(int*)malloc(LISTSIZE*sizeof(int));
if(!(L->elem))
return ERROR;
L->length=0;
L->listsize=LISTSIZE;
return 1;
}
int creatlist(Sqlist *L)//创建顺序表
{
int i;
printf("请输入你要创建的顺序表元素个数:\n");
scanf("%d",&L->length);
if(L->length>=L->listsize)
return ERROR;
printf("请输入你要创建的顺序表:\n");
for(i=0;i<L->length;i++)
{
printf("第%d个元素是:",i+1);
scanf("%d",&L->elem);
}
return 1;
}
void showlist(Sqlist *L) //遍历顺序表
{
int i;
printf("您的顺序表为:");
for(i=0;i<L->length;i++)
printf("%d ",L->elem);
printf("\n");
}
int searchlist(Sqlist *L) //根据元素值查找元素的位置
{
int e;
int i;
printf("请输入你想要查询的元素:");
scanf("%d",&e);
for(i=0;i<L->length;i++)
{
if(e==L->elem)
{
printf("该元素位置为%d\n",i+1);
break;
}
}
if(i>L->length)
printf("尚未找到您想要的值。\n");
return 1;
}
intgetelem(Sqlist L)//根据位置查找元素值
{
int i;
printf("请输入您想要查询的位置:");
scanf("%d",&i);
if(i<1||i>L.length)
return ERROR;
else
printf("您所查询的位置的值为:%d\n",L.elem);
}
void isempty(Sqlist L)//判断表示法为空
{
if(L.length==0)
printf("该表为空\n");
else
printf("该表不为空\n");
}
void listlength(Sqlist L)//求表长
{
printf("该表长为:%d\n",L.length);
}
void clearlist(Sqlist *L) //清空线性表
{
L->length=0;
printf("该表已被清空哦~\n");
}
voiddestroylist(Sqlist *L)//销毁线性表
{
if(L->elem)
free (L);
printf("该表已被销毁哦~\n");
}
void insertlist(Sqlist *L)//在第i个元素之前插入某元素
{
int i,e,j;
printf("请输入插入的元素位置i和元素内容e:");
scanf("%d,%d",&i,&e);
if(i<1||i>L->length)
printf("插入位置不合法。");
else if(L->length==LISTSIZE)
printf("该表已满 无法插入");
else
{
for(j=L->length;j>=i-1;j--)
L->elem=L->elem;
L->elem=e;
++L->length;
}
}
void deletelist(Sqlist *L)//删除第i个元素
{
int i,j;
printf("请输入您要删除的元素位置i:");
scanf("%d",&i);
if(i<1||i>L->length)
printf("删除位置不合法");
else
{
for(j=i;j<=L->length-1;j++)
{
L->elem=L->elem;
}
--L->length;
}
}
int main()
{
Sqlist L;
initlist(&L);
creatlist(&L);
showlist(&L);
/*searchlist(&L);
showlist(&L);
getelem(L);
showlist(&L);
//clearlist(&L);
//destroylist(&L);
isempty(L);
listlength(L);
showlist(&L);*/
insertlist(&L);
showlist(&L);
deletelist(&L);
showlist(&L);
return 0;
}
本帖最后由 ba21 于 2018-3-26 20:55 编辑
愿你 发表于 2018-3-26 17:43
我依旧觉得我这个帖子的线性表没有太大问题啊。
我今天又编写了一遍 结果都出来了,但我今天只是在这个 ...
#include<stdio.h>
#include<stdlib.h>
#define INCREMENT 5
#define OK 1
#define ERROR -1
#define LISTSIZE 10
typedef struct{
int *data;
int length;
int listsize;
}Seqlist;
int Initial(Seqlist *L)
{
L->data=(int*)malloc(LISTSIZE*sizeof(int));
if(!(L->data))
return ERROR;
L->length=0;
L->listsize=LISTSIZE;
return OK;
}
int creat(Seqlist *L)
{
int a,i;
printf("请输入要创建的元素个数: ");
scanf("%d",&a);
if(a>LISTSIZE)
{
printf("元素个数不能超过 %d 个。\n", LISTSIZE);
return ERROR;
}
for(i=0;i<a;i++)
{
printf("第%d个元素为:",i+1);
scanf("%d",&L->data);
L->length++;
}
return OK;
}
void show(Seqlist *L)
{
int i;
printf("线性表中的元素为:");
for(i=0;i<L->length;i++)
printf("%d ",L->data);
printf("\n");
}
int getelem(Seqlist *L)
{
int i;
printf("请输入你需要查找第几号元素:");
scanf("%d",&i);
if(i<1 || i>L->length) // 当i不在范围内时
{
printf("%d 号元素不存在!\n", i);
return ERROR;
}
printf("您查询的结果是:%d\n",L->data);
return OK;
}
int listinsert(Seqlist *L,int i,int e)
{
int k;
if(L->length == LISTSIZE) // 顺序线性表已经满了
{
return ERROR;
}
if(i<1 || i>L->length) // 当i不在范围内时
{
return ERROR;
}
if(i <= L->length) // 若插入数据位置不在表尾
{
/* 将要插入位置后数据元素向后移动一位 */
for(k=L->length-1; k>=i-1; k--)
{
L->data = L->data;
}
}
L->data = e;
L->length++;
return OK;
}
int listdelete(Seqlist *L,int i,int *e)
{
int k;
if(L->length == 0) // 空表
{
return ERROR;
}
if(i<1 || i>L->length) // 删除的位置不正确
{
return ERROR;
}
*e = L->data;
printf("%d, %d\n", L->length, i);
if(i<=L->length)
{
for(k=i; k<=L->length; k++)
{
L->data = L->data;
}
}
L->length--;
return OK;
}
int main()
{
Seqlist L;
int a, b;
// 初始化
Initial(&L);
if(creat(&L)==OK)
{
// 显示
show(&L);
// 获取元素
getelem(&L);
// 插入元素
printf("请输入要插入的元素:");
scanf("%d", &a);
listinsert(&L,2,a);
show(&L);
// 删除元素
printf("执行删除操作:\n");
listdelete(&L,2,&b);
printf("删除的元素是: %d\n", b);
show(&L);
putchar('\n');
}
return 0;
} ba21 发表于 2018-3-26 19:38
{:10_264:}{:10_264:}{:10_264:}甘拜下风!!!!!! 你可以在帮我看看我现在的代码吗 还是和昨天的一样的题目合并 但是这次用顺序表完成
{:10_254:}{:10_254:}{:10_254:}
我还是打印出来的是第一个表{:10_266:}{:10_266:}
# include<stdio.h>
# include<stdlib.h>
# define ERROR -1
# define LISTSIZE 5
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
int initlist(Sqlist *L) //初始化顺序表
{
L->elem=(int*)malloc(LISTSIZE*sizeof(int));
if(!(L->elem))
return ERROR;
L->length=0;
L->listsize=LISTSIZE;
return 1;
}
int creatlist(Sqlist *L)//创建顺序表
{
int i;
printf("请输入你要创建的顺序表元素个数:\n");
scanf("%d",&L->length);
if(L->length>=L->listsize)
return ERROR;
printf("请输入你要创建的顺序表:\n");
for(i=0;i<L->length;i++)
{
printf("第%d个元素是:",i+1);
scanf("%d",&L->elem);
}
return 1;
}
void showlist(Sqlist *L) //遍历顺序表
{
int i;
printf("您的顺序表为:");
for(i=0;i<L->length;i++)
printf("%d ",L->elem);
printf("\n");
}
void unionlist(Sqlist *L1,Sqlist *L2)//合并顺序表(判断L2中的每个元素是否在L1中,若不在则插入L1的尾部。)
{
int a,b,i,j;
int count;
for(i=0;i<L2->length;i++)
{
a=L2->elem;
for(j=0;j<L1->length;j++)
{
b=L1->elem;
if(a==b)
break;
}
if(a!=b)
{
count=L1->length; //用count变量来标识L1的尾部,方便直接插入
L1->elem=a;
L1->length++;
}
}
}
int main()
{
Sqlist L1,L2;
printf("请创建第一个表:");
initlist(&L1);
creatlist(&L1);
showlist(&L1);
printf("请创建第二个表:");
initlist(&L2);
creatlist(&L2);
showlist(&L2);
printf("合并之后的表1为:");
showlist (&L1);
return 0;
} ba21 发表于 2018-3-26 19:38
你可以在帮我看看我现在的代码吗 还是和昨天的一样的题目合并 但是这次用顺序表完成
我还是打印出来的是第一个表
# include<stdio.h>
# include<stdlib.h>
# define ERROR -1
# define LISTSIZE 5
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
int initlist(Sqlist *L) //初始化顺序表
{
L->elem=(int*)malloc(LISTSIZE*sizeof(int));
if(!(L->elem))
return ERROR;
L->length=0;
L->listsize=LISTSIZE;
return 1;
}
int creatlist(Sqlist *L) //创建顺序表
{
int i;
printf("请输入你要创建的顺序表元素个数:\n");
scanf("%d",&L->length);
if(L->length>=L->listsize)
return ERROR;
printf("请输入你要创建的顺序表:\n");
for(i=0;i<L->length;i++)
{
printf("第%d个元素是:",i+1);
scanf("%d",&L->elem);
}
return 1;
}
void showlist(Sqlist *L) //遍历顺序表
{
int i;
printf("您的顺序表为:");
for(i=0;i<L->length;i++)
printf("%d ",L->elem);
printf("\n");
}
void unionlist(Sqlist *L1,Sqlist *L2) //合并顺序表(判断L2中的每个元素是否在L1中,若不在则插入L1的尾部。)
{
int a,b,i,j;
int count;
for(i=0;i<L2->length;i++)
{
a=L2->elem;
for(j=0;j<L1->length;j++)
{
b=L1->elem;
if(a==b)
break;
}
if(a!=b)
{
count=L1->length; //用count变量来标识L1的尾部,方便直接插入
L1->elem=a;
L1->length++;
}
}
}
int main()
{
Sqlist L1,L2;
printf("请创建第一个表:");
initlist(&L1);
creatlist(&L1);
showlist(&L1);
printf("请创建第二个表:");
initlist(&L2);
creatlist(&L2);
showlist(&L2);
printf("合并之后的表1为:");
showlist (&L1);
return 0;
} # include<stdio.h>
# include<stdlib.h>
# define ERROR -1
# define LISTSIZE 5
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
int initlist(Sqlist *L) //初始化顺序表
{
L->elem=(int*)malloc(LISTSIZE*sizeof(int));
if(!(L->elem))
return ERROR;
L->length=0;
L->listsize=LISTSIZE;
return 1;
}
int creatlist(Sqlist *L) //创建顺序表
{
int i;
printf("请输入你要创建的顺序表元素个数:\n");
scanf("%d",&L->length);
if(L->length>=L->listsize)
return ERROR;
printf("请输入你要创建的顺序表:\n");
for(i=0;i<L->length;i++)
{
printf("第%d个元素是:",i+1);
scanf("%d",&L->elem);
}
return 1;
}
void showlist(Sqlist *L) //遍历顺序表
{
int i;
printf("您的顺序表为:");
for(i=0;i<L->length;i++)
printf("%d ",L->elem);
printf("\n");
}
void unionlist(Sqlist *L1,Sqlist *L2) //合并顺序表(判断L2中的每个元素是否在L1中,若不在则插入L1的尾部。)
{
int a,b,i,j;
int count;
for(i=0;i<L2->length;i++)
{
a=L2->elem;
for(j=0;j<L1->length;j++)
{
b=L1->elem;
if(a==b)
break;
}
if(a!=b)
{
count=L1->length; //用count变量来标识L1的尾部,方便直接插入
L1->elem=a;
L1->length++;
}
}
}
int main()
{
Sqlist L1,L2;
printf("请创建第一个表:");
initlist(&L1);
creatlist(&L1);
showlist(&L1);
printf("请创建第二个表:");
initlist(&L2);
creatlist(&L2);
showlist(&L2);
printf("合并之后的表1为:");
showlist (&L1);
return 0;
} ba21 发表于 2018-3-26 19:38
代码在12楼{:10_264:}
页:
[1]