| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 563 人关注过本帖
标题:求高手解关于线性表的问题
只看楼主 加入收藏
江湖2331
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-4-11
结帖率:0
收藏
已结贴  问题点数:5 回复次数:4 
求高手解关于线性表的问题
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define LIST_INIT_SIZE 5
#define LISTINCREMENT 1

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 Renew(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=Renew(LC);
}
else
{
LC.elem[LC.length]=LB.elem[j];
LC.length++;
j++;
if(LC.length>=LC.listsize)
LC=Renew(LC);
}
}//while

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

while(j<=LB.length-1)
{
LC.elem[LC.length]=LB.elem[j];
LC.length++;
j++;
if(LC.length>=LC.listsize)
LC=Renew(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;
}

这是一个线性表合并的问题,我想问的是线性表是不是就是数组,那为什么还用结构体定义,直接定义两个数组然后和合并不就行了吗?

搜索更多相关主题的帖子: 线性表 
2011-04-11 22:48
帅的让人抽
Rank: 4
来 自:安徽
等 级:业余侠客
帖 子:94
专家分:224
注 册:2010-9-30
收藏
得分:2 
这种事!太难了……

樱花下落的速度依然是秒速五厘米,即使发了一千次短信,
心与心之间也只能靠近一厘米……
2011-04-14 13:04
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:2 
   结构体可以保存更多的信息,,,数组存的东西太单一了,要用线性表实现一些学生信息的管理还用数组搞吗?
2011-04-16 01:40
石木12
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:3
专家分:7
注 册:2011-3-30
收藏
得分:2 
现在正学着呢。表示压力很大
2011-04-19 22:10
enenen
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2011-7-6
收藏
得分:0 
可以说是,也可以说不是,
当线性表中的elem为单一的值时,就像整形一类的,这时没多大区别;
如果elem比较复杂时,就不是了;
2011-07-07 18:15
快速回复:求高手解关于线性表的问题
数据加载中...
 
   



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

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