顺序表的合并操作算法,应该怎么写?

nanshi07 2011-09-25 01:49:35
我试验写了一个顺序表的合并操作算法,但是不对,应该怎么写?
#include <stdio.h>

struct stu{ //线性表的定义
int data[5];
int length;
};
//-------------------------------
struct xin{ //合并之后的新线性表的定义
int data[10];
int length;
}
//--------------------------------
void jianli(stu *l)//线性表的建立
{
int i;
l->length=0;
for(i=0;i<5;i++)
{
scanf("%d",&l->data[i]);
l->length++;
}
}
//---------------------------------------------------------------

int a_charu_b(stu *l,stu *k,stu *p)//线性表l,k的合并操作
{
int m,n;
int i;

for (m=l.length=0;m<5;m++)
scanf("%d",&l->data[m]);
printf("%d\t",l.data[m]);

for (n=k.length=0;n<5;n++)
scanf("%d",&k->data[n]);
printf("%d\t",k.data[n]);

for (i=0;i<=l.length;i++)
if (l.data[i]=k.data[i])
p.data[i]=l.data[i];
else (l.data[i]=k.data[i])
{
p.data[i]=l.data[i];
p.data[i+1]=k.data[i];
i++;
}

int main()
{
int m,i;
stu l;
jianli(&l);
jianli(&k)
for(i=0;i<5;i++)
printf("%d\t",l.data[i]);
int a_charu_b(&l,&k,&p);
getchar();
getchar();
//scanf("%d",m);
return 0;
-------------------------------------------------
特别是在函数a_charu_b,和主函数main()中调用的错误,请大侠帮我修改补充完整一下这个算法,谢谢!

...全文
284 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengwenyao18 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 nanshi07 的回复:]
是吗?我靠,全名叫什么啊这本书?楼上大侠指点一下啊。
[/Quote]
全名就是《数据结构》(C语言版)啊!不厚,就两百多页,里面的东西都很基础,还有一本配套的课后习题答案详解。
nanshi07 2011-10-13
  • 打赏
  • 举报
回复
是吗?我靠,全名叫什么啊这本书?楼上大侠指点一下啊。
uncle_bacon 2011-09-28
  • 打赏
  • 举报
回复
路过帮顶!
chengwenyao18 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nanshi07 的回复:]
补充一下,感觉看严版的数据结构那么抽象呢......有带例子的数据结构的c语言版本的书吗?请推荐一本谢谢。
[/Quote]我们当时用的是中国科学技术大学出版社的《数据结构》(C语言版),是安徽省省属高校规划教材吧!我感觉挺好的,里面都有可编译的函数源码,也比较薄,就是不知道现在能不能买得到了。
Alice_yangyang 2011-09-27
  • 打赏
  • 举报
回复
void Union(SqList &La,SqList Lb) //取并集
{
int La_len,Lb_len;
int i,e;
La_len=ListLength(La);
Lb_len=ListLength(Lb);
for(i=1;i<=Lb_len;i++)
{
GetElem(Lb,i,e);
if(LocateElem(La,e)==0)
ListInsert(La,++La_len,e);
}

}

void MergeList(SqList La,SqList Lb,SqList &Lc)//有序合并
{
int i=1,j=1,k=0;
int La_len,Lb_len;
int ai,bj;
InitList(Lc);
La_len=ListLength(La);
Lb_len=ListLength(Lb);
while(i<=La_len&&j<=Lb_len)
{
GetElem(La,i,ai);
GetElem(Lb,j,bj);
if(ai<=bj)
{
ListInsert(Lc,++k,ai);
++i;
}
else
{
ListInsert(Lc,++k,bj);
++j;
}
}
while(i<=La_len)
{
GetElem(La,i++,ai);
ListInsert(Lc,++k,ai);
}
while(j<=Lb_len)
{
GetElem(Lb,j++,bj);
ListInsert(Lc,++k,bj);
}

}
「已注销」 2011-09-25
  • 打赏
  • 举报
回复
这边有一个我自己写的算法,你的我是看的有点晕,你看下有用不
#include<stdio.h>
#include<stdlib.h>
typedef struct node *link;
typedef struct node{
int front;
link next;
}Node;
link headA,headB,pList1,pList2;//init two Main Lists and other two Lists
//be used to sort the mergedList
void ListSort(node*p){
node *x,*y,*z;
int temp;
for(x=p;x->next;x=x->next){
z=x;
for(y=x->next;y;y=y->next){
if(z->front>y->front){
z=y;
}
}
if(z!=x){
temp=z->front;
z->front=x->front;
x->front=temp;
}
}
}
int main(){
int n,m,i;
scanf("%d %d",&n,&m);
pList1=headB=(link)malloc(sizeof(Node));//init pList1
scanf("%d",&headB->front);
for(i=1;i<n;i++){//input
headA=(link)malloc(sizeof(Node));
headB->next=headA;
headB=headA;
scanf("%d",&headB->front);
}
headB->next=NULL;
pList2=headB=(link)malloc(sizeof(Node));//init pList2
scanf("%d",&headB->front);
for(i=1;i<m;i++){//input
headA=(link)malloc(sizeof(Node));
headB->next=headA;
headB=headA;
scanf("%d",&headB->front);
}
headB->next=NULL;
headA=pList1;
for(i=1;i<n;i++){
headA=headA->next;
}
headA->next=pList2;
ListSort(pList1);
headA=pList1;
while(headA){//output
printf("%d ",headA->front);
headA=headA->next;
}
return 0;
}
nanshi07 2011-09-25
  • 打赏
  • 举报
回复
谁能指点一下呢?
nanshi07 2011-09-25
  • 打赏
  • 举报
回复
补充一下,感觉看严版的数据结构那么抽象呢......有带例子的数据结构的c语言版本的书吗?请推荐一本谢谢。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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