| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3317 人关注过本帖
标题:顺序表合并问题
只看楼主 加入收藏
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
 问题点数:0 回复次数:12 
顺序表合并问题

将顺序表LA 和LB 合并成顺序表LC:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define LIST_INIT_SIZE 80
#define LISTINCREMENT 10

typedef struct{
int *elem;
int length;
int listsize;
}SqList;

SqList Init(SqList L); //初始化函数
SqList Input(SqList L); //输入LA 和 LB 顺序表数据
void Output(SqList L); //输出函数
SqList Merge(SqList LA,SqList LB,SqList LC);
SqList RenewLC(SqList LC); //此函数为分配LC顺序表增量

int main(void)
{
SqList LA,LB,LC;

LA=Init(LA);
LB=Init(LB);

LA=Input(LA);
LB=Input(LB);

Output(LA);
Output(LB);

LC=Merge(LA,LB,LC);

Output(LC);

getch();
return 0;
}

SqList Init(SqList L)
{
L.elem=(int *)malloc(LIST_INIT_SIZE * sizeof(int));
if(!L.elem)
{
printf("Dynamic memory malloc failure.\n");
exit(1);
}
L.length=0;
L.listsize=LIST_INIT_SIZE;

return L;
}

SqList Input(SqList L)
{
int value;
int *newbase;

printf("Please input value: ");
scanf("%d",&value);

while(value)
{
L.elem[L.length]=value;
L.length++;
if(L.length>=L.listsize)
{
newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT) * sizeof(int));
if(!newbase)
{
printf("Renew malloc memory failure.\n");
exit(1);
}
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
scanf("%d",&value);
}

return L;
}

void Output(SqList L)
{
int i;

for(i=0;i<=L.length-1;i++)
printf("%d\t",L.elem[i]);

free(L.elem);
printf("\n");
}

SqList Merge(SqList LA,SqList LB,SqList LC) //主要就是此函数
{
int i,j;

LC=Init(LC);

i=0;
j=0;
while(i<=LA.length-1 && j<=LB.length-1)
{
if(LA.elem[i]<=LB.elem[j])
{
LC.elem[LC.length]=LA.elem[i];
LC.length++;
i++;
if(LC.length>=LC.listsize)
LC=RenewLC(LC);
}
else
{
LC.elem[LC.length]=LB.elem[j];
LC.length++;
j++;
if(LC.length>=LC.listsize)
LC=RenewLC(LC);
}
}//while

while(i<=LA.length-1)
{
LC.elem[LC.length]=LA.elem[i];
LC.length++;
i++;
if(LC.length>=LC.listsize)
LC=RenewLC(LC);
}

while(j<=LB.length-1)
{
LC.elem[LC.length]=LB.elem[j];
LC.length++;
j++;
if(LC.length>=LC.listsize)
LC=RenewLC(LC);
}

return LC;
}

SqList Renew(SqList LC)
{
int *newbase;

newbase=(int *)realloc(LC.elem,(LC.listsize+LISTINCREMENT) * sizeof(int));
if(!newbase)
{
printf("Renew malloc memory failure.\n");
exit(1);
}
LC.elem=newbase;
LC.listsize+=LISTINCREMENT;

return LC;
}

thank you!

搜索更多相关主题的帖子: 顺序 
2006-03-16 21:55
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
收藏
得分:0 

newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT) * sizeof(int));
动态表申请空间应该是 malloc 吧!


努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-03-16 22:14
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
得分:0 
以下是引用cxwl3sxl在2006-3-16 22:14:00的发言:

newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT) * sizeof(int));
动态表申请空间应该是 malloc 吧!

按情况


2006-03-16 22:30
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
收藏
得分:0 
上面的是我看错了!仔细看了一下,算法应该没有什么大问题,不过我有一个建议,在移动的时候建议用指针来实现……(仅个人看法!)

努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-03-16 22:38
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
得分:0 
晕,没大问题我能粘上来吗?你有没有运行啊,算法不正确。

2006-03-16 22:42
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
收藏
得分:0 
不是我不想啊,是这里没有编译语言的程序啊

努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-03-16 22:47
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
收藏
得分:0 
我这里有一个顺序表的课件,如果你要的话我传你(我不知道这里怎么上传文件

努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-03-16 22:51
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
得分:0 
thank you! send to :chentianqiao06@sohu.com

2006-03-16 22:54
静夜思
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:济南的冬天
等 级:管理员
威 望:11
帖 子:8913
专家分:2567
注 册:2004-3-25
收藏
得分:0 
如果发表帖子的时候有那个按钮,在内容输入框上面,选择文件点上传就可以。
如果在回复中上传,就点上面的“回复帖子”,然后同上

畅所欲言
2006-03-16 22:55
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
得分:0 
下面和上面有什么不同吗?
?include<stdio.h>
?include<conio.h>
篿nt main(void)

? int a[5]={1,3,5,7,9},b[5]={2,4,6,8,10},c[10],i,j,k,n;
?
? i=0; j=0; k=0;
? while(i<=4 && j<=4)
? {
? if(a[i]<=b[j])
? {
? c[k]=a[i];
? k++;
? i++;
? }
? else
? {
? c[k]=b[j];
? k++;
? j++;
? }
? }
? while(i<=4)
? {
? c[k]=a[i];
? k++;
? i++;
? }
? while(j<=4)
? {
? c[k]=b[j];
? k++;
? j++;
? }
? for(n=0;n<=9;n++)
? printf("%3d",c[n]); printf("\n");
? getch();
? return 0;
}
左侧问号属粘贴问题。

2006-03-16 23:14
快速回复:顺序表合并问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016636 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved