引用 神的话..初学应该从国外的名著开始.那样会有好的习惯..
我就在改呢.
----------------解决方案--------------------------------------------------------
统计链表数组中某种商品购买超过2次的商品代码
代码(1,2,3,4,5,6)
#include <stdio.h>
#include <stdlib.h>
struct link
{
int num;
struct link *next;
};
struct link *creat(struct link *head) /*创建链表*/
{
struct link *p1,*p2;
int n=0;
p1=p2=(struct link *)malloc(sizeof(struct link));
scanf("%d",&p1->num);
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct link *)malloc(sizeof(struct link));
scanf("%d",&p1->num);
}
p2->next=NULL;
return head;
}
main()
{
struct link D[10],*p1;
int n,i,s,a[6],k=0,flag1,flag2,sum,B[6][2]; /*定义数据,全有用*/
for(n=0;n<10;n++) /*创建数组存放10个链表*/
D[i].next=creat(&D[i]);
for(i=1;i<=6;i++) /*对商品1-6逐一对照*/
{
s=0;
for(n=0;n<10;n++)
{
p1=&D[n];
while(p1->next!=NULL)
{
p1=p1->next;
if(p1->next==i)
s++;}}
if(s>=2)
{a[k]=i; /*存放满足条件的商品*/
k++; }}
for(i=0;i<k;i++)
printf("%d",a[i]);} /*输出满足条件的商品*/
链表数组建立正确吗?
数据输入正确吗?
输入数据后为什么没有输出???
[此贴子已经被作者于2006-6-18 11:47:32编辑过]
D[i].next 这是什么? 编译器没提示错误?
#include <stdio.h>
#include <stdlib.h>
struct link
{
int num;
struct link *next;
};
struct link *creat(struct link *head)
{
struct link *p1,*p2;
int n=0;
p1=p2=(struct link *)malloc(sizeof(struct link));
scanf("%d",&p1->num);
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct link *)malloc(sizeof(struct link));
scanf("%d",&p1->num);
}
p2->next=NULL;
return head;
}
main()
{
struct link D[10],*p1;
int n,i,j,s,a[6],k=0,b=0,flag1,flag2,sum,B[6][2];
for(n=0;n<10;n++)
D[n].next=creat(&D[n]);
for(i=1;i<=6;i++)
{
s=0;
for(n=0;n<10;n++)
{
p1=&D[n];
while(p1->next!=NULL)
{
p1=p1->next;
if(p1->num==i)
s++;
}
}
if(s>=2)
{
a[k]=i;
k++;
}
}
printf("Yi Wei Fan Mu Ji:\n");
for(i=0;i<k;i++)
printf("%4d",a[i]);
}
[此贴子已经被作者于2006-6-21 16:10:54编辑过]
水平有限,但对此题的提出者要说明2点,仅供参考:在C中无链表数组这一概念
链表与数组有本质区
统计链表数组中某种商品购买超过2次的商品代码
代码(1,2,3,4,5,6)
#include <stdio.h>
#include <stdlib.h> /*c中不有这样开头*/
struct link
{
int num;
struct link *next;
};
struct link *creat(struct link *head) /*创建得对*/ /*创建链表*/
{
struct link *p1,*p2;
int n=0;
p1=p2=(struct link *)malloc(sizeof(struct link));
scanf("%d",&p1->num);
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct link *)malloc(sizeof(struct link));
scanf("%d",&p1->num);
}
p2->next=NULL;
return head;
}
main()
{
struct link D[10],*p1;
int n,i,s,a[6],k=0,flag1,flag2,sum,B[6][2]; /*定义数据,全有用*/
for(n=0;n<10;n++) /*此处都和数组无关 */ /*创建数组存放10个链表*/
D[i].next=creat(&D[i]);
for(i=1;i<=6;i++) /*对商品1-6逐一对照*/
{
s=0;
for(n=0;n<10;n++)
{
p1=&D[n];
while(p1->next!=NULL)
{
p1=p1->next;
if(p1->next==i)
s++;}}
if(s>=2)
{a[k]=i; /*存放满足条件的商品*/
k++; }}
for(i=0;i<k;i++)
printf("%d",a[i]);} /*输出满足条件的商品*/
下面是本人做的,上机通过.
#include "stdio.h"
struct link
{int num;
struct link *next;
};
struct link *creat(struct link *head,int k)
{struct link *p1,*p2;
int n=1;
p1=p2=(struct link*)malloc(sizeof(struct link));
scanf("%d",&p1->num);
while(n<k)
{n=n+1;
if (n==2) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct link *)malloc(sizeof(struct link));
scanf("%d",&p1->num);
}
p2->next=p1;
p1->next=NULL;
return head;
}
main( )
{struct link *head=NULL,*p1;
int a[7]={0,0,0,0,0,0,0},i;
head=creat(head,10);
p1=head;
while(p1)
{a[p1->num]++;
p1=p1->next;
}
for (i=1;i<7;i++)
if (a[i]>=2) printf("%4d",i);
printf("\n");
}