当前位置: 代码迷 >> C语言 >> [求助]链表问题
  详细解决方案

[求助]链表问题

热度:129   发布时间:2006-06-18 11:46:35.0
[求助]链表问题

统计链表数组中某种商品购买超过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编辑过]

搜索更多相关的解决方案: 链表  

----------------解决方案--------------------------------------------------------
以下是引用hsong1986在2006-6-18 11:46:35的发言:
D[i].next=creat(&D[i]);


D[i].next 这是什么? 编译器没提示错误?


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-18 06:48:57
SunShining

等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
  得分:0 
老潭书上的确错误很多.而且他的代码很不规范化

引用 神的话..初学应该从国外的名著开始.那样会有好的习惯..

我就在改呢.
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-18 07:07:52
hsong1986

等 级:新手上路
帖 子:13
专家分:0
注 册:2006-6-13
  得分:0 

#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编辑过]


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-19 03:46:52
穆扬

等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
  得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-06-19 03:48:27
乱世魔头

等 级:新手上路
帖 子:12
专家分:0
注 册:2006-5-18
  得分:0 

水平有限,但对此题的提出者要说明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");
}


----------------解决方案--------------------------------------------------------
  相关解决方案