一个数据结构线性表方面的题,请用C语言编出来,并能实现,望有志者帮一下忙,谢谢~~~~
//—————————————————————————
#include stdio.h
#include stdlib.h
#define CF “%d\t”
typedef int datatype;
typedef struct NODE{
datatype data;
struct NODE *next;
} node;
node *mer(node *la,node *lb)/*合并表*/
{
node *t1,*t2,*lrc,*lnew=NULL;
if (la-data=lb-data)
{
lnew=la;
la=la-next ;
lb=lb-data==lnew-data?lb-next :lb;
}
else
{
lnew=lb;
lb=lb-next;
}
lrc=lnew;
while (lalb)
{
if (la-data =lb-data ) {
lnew-next =la;
t1=la=la-next ;
t2=lb=lb-data==lnew-next-data?lb-next :lb;
}
else
{
lnew-next=lb;
t2=lb=lb-next;
t1=la=la-data==lnew-next-data?la-next :la;
}
lnew=lnew-next ;
la=t1;
lb=t2;
}
lnew-next=la?la:lb;
return lrc;
}
void prt(node *a)/*输出表*/
{
node *t=a;
while (t)
{
printf(CF,t-data );
t=t-next ;
}
}
node *init(datatype *data,int len)/*初始化表*/
{
node *rt=malloc(sizeof(node));
node *rc=rt;
int i;
rt-data=data[0];
for (i=1; ilen; i++) {
rt-next =malloc(sizeof(node));
rt-next-data =data[i];
rt=rt-next ;
}
rt-next =NULL;
return rc;
}
void del(node *a)/*删除表*/
{
if (a-next ) del(a-next );
free(a);
}
int main(void)
{
node *la,*lb,*lc;
int a[]={3,5,7,8,9,10},b[]={2,3,4,5,6,7};
la=lb=lc=NULL;
la=init(a,6);
lb=init(b,6);
lc=mer(la,lb);
prt(lc);
del(lc);
return 0;
}
//—————————————————————————
数据结构习题~c语言描述
1“ab中内容按增序排列” 体现在输入上,比如A:12345 就不要给自己找麻烦写成54321,不然还得排序;⑴.因为是增序,所以用指针遍历A、B链表,每次获取较小值加入C,注意重复筛选,可以在插入时多判断一下,也可以在最后遍历一次C表。⑵.以A表为主,每移动一次A表指针都要遍历一次B表至其表尾或(A-data B-data)即此时B的值已经大于A。最后就是主函数中提供输入A、B表的提示语,还有3次printf。
下面提供一个我写过的类似代码,忘记是什么题目了,好像就是(1)。
#include stdio.h
#include malloc.h
/*链表节点定义*/
typedef struct node
{
int data;
struct node *next;
}node;
node *head1,*head2,*Head;
/*链表节点创建*/
void initiatesl(node **h)
{
*h = (node*)malloc(sizeof(node));
(*h)-next = NULL;
}
/*根据给定表长生成基础表1、2*/
void create_list(node *h,int i)
{
int n = 0;
node *p,*q = h;
for(;n i;n++)
{
initiatesl(p);
q-next = p;
scanf(“%d”,q-next-data);
q = q-next;
}
}
/*链表合成*/
void merge(node *H,node *h1,node *h2)
{
node *p = h1-next,*q = h2-next,*r = H,*s = H;
for(;p != NULL q != NULL;r = r-next)
{
initiatesl(r-next);
if(p-data q-data)
{
r-next-data = p-data;
p = p-next;
}
else if(p-data q-data)
{
r-next-data = q-data;
q = q-next;
}
else
{
r-next-data = p-data;
p = p-next;
q = q-next;
}
}
if(p == NULL)
for(;q != NULL;q = q-next,r = r-next)
{
initiatesl(r-next);
r-next-data = q-data;
}
else
for(;p != NULL;p = p-next,r = r-next)
{
initiatesl(r-next);
r-data = p-data;
}
}
/*主函数及交互界面*/
int main(void)
{
int a,b;
node *s,*S = head1;
initiatesl(head1);/*创建三个头结点*/
initiatesl(head2);
initiatesl(Head);
printf(“Please input the length of the two list.(a,b)\n”);/*给定长度输入样式*/
scanf(“%d,%d”,a,b);
printf(“Input list one:”);/*创建链表1、2*/
create_list(head1,a);
printf(“Input list two:”);
create_list(head2,b);
merge(Head,head1,head2);
s = Head-next;
printf(“L :”);
for(;s != NULL;s = s-next)
printf(“%d “,s-data);
printf(“\n”);
return 0;
}
数据结构c语言版唐国民王国钧习题3
谈谈如何学习数据结构:1.如果你没有学过C语言,或者C语言学的不好的时候把数据结构当成一本数学书来学,它所讲述的都是一些简单的图论。在你的大脑中的主线不能丢失:线性结构,树结构和图结构。当你不再考虑复杂的程序设计时,仅仅研究个个离散点之间的关系,似乎数据结构也就不会那么难了。2.学习好了抽象的离散点关系后,再巩固一下你的C语言水平,书中描述的都是类C。因此你只要学习简单的C定义、判断、循环语句就基本能看的懂课本中所有程序了。3.以上都完成后,从数据结构的线性表开始。线性表中顺序表似乎是为你学习C语言设计的,学好线性表的链表是你起步的关键。后面的树结构,图结构,排序,查找都少不了链式结构,往往这个也是最难的。4.看程序的时候一定要自己在纸上画画,最好先学会画程序的流程图,也许那样你学程序也就会更快一些。5.数据结构是程序设计的最基本也是最有用的地方,学完之后你会受益匪浅的,也许这本书可以决定你以后的道路或者命运。祝你成功!