C语言程序求纠错!!~在线等!……

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序求纠错!!~在线等!……相关的知识,希望对你有一定的参考价值。

题目:
已知两个元素按照值递增有序排列的线性表A和B,且同一表中元素值各不相同。试构造一个线性表C,其元素为A和B中元素的交集,且元素按照值递增有序排列。(采用单向链表的存储方式)
下面是我写的程序:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node

int data;
struct Node *next;
node;
node *input()

int i;
node *p,*q,*r;
q=(node *)malloc(sizeof(node));
q->next=NULL;
p=q;
printf("请输入不重复的数据(递增,以0结尾):\n");
scanf("%d",&i);
while(i!=0)

r=(node *)malloc(sizeof(node));
r->data=i;
r->next=NULL;
p->next=r;
p=r;
scanf("%d",&i);

return(q);

void output(node *head)

node *p;
p=head;
while(p)

printf("%d\n",p->data);
p=p->next;


void fun(node *ahead,node *bhead,node *chead)

node *p,*q,*r;
p=ahead->next;
q=bhead->next;
r=chead->next;
while(p!=NULL&&q!=NULL)

if(p->data<q->data) p=p->next;
else if(p->data==q->data) r->data=p->data;p=p->next;q=q->next;r=r->next;
else q=q->next;

main()

node *ahead,*bhead,*chead;
printf("线性表A\n");
ahead=input();
printf("线性表B\n");
bhead=input();
fun(ahead,bhead,chead);
printf("取交集后的数据:\n");
output(chead);

调试时一执行到fun函数,就错误了。。。
求大神帮帮忙呀!!!感激不尽。。。

参考技术A #include <stdio.h>
#include <stdlib.h>
typedef struct Node

int data;
struct Node *next;
node;

node *input()

int i;
node *p,*q,*r;
q=(node *)malloc(sizeof(node));
q->next=NULL;
p=q;
printf("请输入不重复的数据(递增,以0结尾):\n");
scanf("%d",&i);
while(i!=0)

r=(node *)malloc(sizeof(node));
r->data=i;
r->next=NULL;
p->next=r;
p=r;
scanf("%d",&i);
fflush(stdin);

return(q);


void output(node *head)

node *p;
p=head->next;
while(p)

printf("%d\n",p->data);
p=p->next;



void fun(node *ahead,node *bhead,node *chead)

node *p,*q,*r,*t;
p=ahead->next;
q=bhead->next;
r=chead;
while(p!=NULL&&q!=NULL)

if(p->data<q->data) p=p->next;
else

if(p->data==q->data)

t=(node *)malloc(sizeof(node));
t->next=NULL;
t->data=p->data;
r->next=t;
p=p->next;
q=q->next;
r=r->next;

else
q=q->next;




node * initialize(node *head)

head=(node *)malloc(sizeof(node));
head->next=NULL;
return head;

void main()

node *ahead,*bhead,*chead=NULL;
printf("线性表A\n");
ahead=input();
printf("线性表B\n");
bhead=input();
chead=initialize(chead);
fun(ahead,bhead,chead);
printf("取交集后的数据:\n");
output(chead);


增加一个初始化chead的函数,另外你的fun函数中涉及c线性表的有逻辑错误。
参考技术B 你的程序有点乱,改起来很麻烦,只好试一下这个
给你
#include<stdio.h>
#include<malloc.h>
#include<iostream>
typedef struct

int *num;
int len;
list;
void display(list l)

int k=0;
int *p=l.num;
for(;k<l.len;k++)
printf("%d",*p++);
printf("\n");

int creat(list <,int i)

if(!i)return0;
lt.num = (int*)malloc(i*sizeof(int));
if(!lt.num)return0;
lt.len=i;
int*p=lt.num;
for(int k =0;k<i;k++)

scanf("%d",p++);

return 1;

int merlist(list la,list lb,list &lc)

int *pa =la.num,*pb=lb.num,*pc;
lc.num = (int*)malloc((la.len+lb.len)*sizeof(int));
if(!lc.num)return0;
int*pa_len=la.len+la.num;
int*pb_len=lb.len+lb.num;
pc=lc.num;
for(;pa<=pa_len;pa++)

for(pb=lb.num;pb<=pb_len;pb++)

if(*pa==*pb)

for(int*p=pb;p<=pb_len;p++)*p=*(p+1);
pb_len--;
break;


if(pb>pb_len)*pc++=*pa,lc.len+=1;

if(pb_len)
--pc;
for(pb=lb.num;pb<=pb_len;)

*pc=*pb++;lc.len++;pc++;

--pc;--lc.len;

if(!lc.len)
lc.num=la.num;
lc.len=la.len;
return 1;

int main()

int i;
listla,lb,lc;
lc.len=0;
scanf("%d",&i);
if(creat(la,i))

scanf("%d",&i);
if(creat(lb,i))

printf("listla :");display(la);
printf("listlb :");display(lb);
merlist(la,lb,lc);
printf("listlc :");display(lc);

else

lc.num =la.num;lc.len=la.len;
printf("listla :");display(la);
printf("listlc :");display(lc);



else

scanf("%d",&i);
if(creat(lb,i))

lc.num= lb.num;
lc.len=lb.len;
printf("listlb :");display(lb);
printf("listlc :");display(lc);

elsereturn 0;

return 0;
参考技术C

 修改后的程序如下(修改地方已用符号标出):

       #include <stdio.h>

  #include <stdlib.h>

  #include <string.h>

  typedef struct Node

  

  int data;

  struct Node *next;

  node;

  node *input()

  

  int i;

  node *p,*q,*r;

  q=(node *)malloc(sizeof(node));

  q->next=NULL;

  p=q;

  printf("请输入不重复的数据(递增,以0结尾):\\n");

  scanf("%d",&i);

  while(i!=0)

  

  r=(node *)malloc(sizeof(node));

  r->data=i;

  r->next=NULL;

  p->next=r;

  p=r;

  scanf("%d",&i);

  

  return(q);

  

  void output(node *head)

  

  node *p;

  p=head->next;

  while(p)

  

  printf("%d\\n",p->data);

  p=p->next;

  

  

    void fun(node *ahead,node *bhead,node * &chead)      //chead对其引用

  

  node *p,*q,*r,*tmp;

  p=ahead->next;

  q=bhead->next;

    chead=(node*)malloc(sizeof(node));

  chead->next=NULL;

  r=chead;

  while(p!=NULL&&q!=NULL)

  

  if(p->data<q->data) p=p->next;

  else

  

  if(p->data==q->data)

  

    tmp=(node*)malloc(sizeof(node));

    tmp->data=p->data;

    tmp->next=NULL;

    p=p->next;

           q=q->next;

    r->next=tmp;

    r=r->next;

  

  else q=q->next;

  

  

  

  int main()

  

  node *ahead,*bhead,*chead;

  printf("线性表A\\n");

  ahead=input();

  printf("线性表B\\n");

  bhead=input();

  fun(ahead,bhead,chead);

  printf("取交集后的数据:\\n");

  output(chead);

  return 0;

  

本回答被提问者和网友采纳

以上是关于C语言程序求纠错!!~在线等!……的主要内容,如果未能解决你的问题,请参考以下文章

c语言无符号长整形赋值问题,在线等,求解答!!!

关于C语言链表的问题,一个排序的问题,按num排序,求大佬帮助,在线等~!有点急~!

c语言(求改错):用邻接表创建图并实现深度优先遍历 不知道怎么改了 在线等 各位大神行行好!!!!

编程求出100到10000之间既是素数又是回文数的所有数~用c语言,急 在线等

求C语言高手解决,程序有一处错误始终找不出来。下面是程序代码。回答好了追加100分啊!在线等、很急!

知道今天星期几以及年月日,编写C程序,要求能算出任意天后是星期几以及年月日,求高手,在线等啊,急