3 回答
TA贡献1900条经验 获得超5个赞
#include
<stdio.h>
#include
<stdlib.h>
#include
<time.h>
#define
ELEMTYPE
int
typedef
struct
set
{
ELEMTYPE
m;
struct
set
*next;
}*NODE;
NODE
InitSet()
{
NODE
head
=
(NODE)malloc(sizeof(set));
head->next
=
NULL;
return
head;
}
bool
Insert(NODE
head,
ELEMTYPE
e)
{
//
创建增序链表
NODE
p,q;
p
=
head;
q
=
(NODE)malloc(sizeof(set));
if(q
==
NULL)
return
false;
q->m
=
e;
if(p->next
==
NULL)
{
//
直接插在头结点后
q->next
=
NULL;
p->next
=
q;
return
true;
}
while(p->next
!=
NULL)
{
if(p->next->m
==
e)
return
false;
if(p->next->m
>
e)
{
q->next
=
p->next;
p->next
=
q;
return
true;
}
p
=
p->next;
}
if(p->next
==
NULL)
{
//
插在链表尾部
p->next
=
q;
q->next
=
NULL;
}
return
true;
}
void
ShowSet(NODE
head)
{
NODE
p
=
head->next;
for(;p
!=
NULL;p
=
p->next)
printf("%d
",p->m);
printf("\n");
}
bool
InSet(NODE
head,
ELEMTYPE
e)
{
NODE
p
=
head->next;
for(;p;p
=
p->next)
if(p->m
==
e)
return
true;
return
false;
}
bool
IsEmpty(NODE
head)
{
return
(head->next
==
NULL);
}
int
SetLength(NODE
head)
{
int
n
=
0;
NODE
p
=
head->next;
for(;p;p
=
p->next)
++n;
return
n;
}
int
main()
{
NODE
set
=
InitSet();
int
i,n;
srand(time(NULL));
n
=
rand()%100
+
1;
for(i
=
0;
i
<
30;
++i)
Insert(set,rand()%60
+
1);
ShowSet(set);
printf("该集合共有%d个人元素。\n",SetLength(set));
if(InSet(set,n))
printf("%d在集合中。\n",n);
else
printf("%d不在集合中。\n",n);
return
0;
}
TA贡献1864条经验 获得超6个赞
#include<stdio.h>
#include<malloc.h>
typedef
struct
Node
{
int
data;//数据域
struct
Node
*next;//指针域
}Node,*LinkList;
int
in_set(LinkList
*L,int
n);
int
main()
{
LinkList
L;
int
i=1;
L=(LinkList)malloc(sizeof(Node));
printf("请输入集合整型元素(用空格隔开):\n");
do
{
scanf("%d",&L->data
);
L=(LinkList)realloc(L,sizeof(Node)*++i);
}while(getchar()!='\n');
if(in_set(&L,i))
printf("集合中存在0元素\n");
else
printf("集合中不存在0元素\n");
}
int
in_set(LinkList
*L,int
n)
{
int
i;
for(i=0;i<n;i++)
if((*L)->data==0)//如果存在0元素,返回1
return
1;
return
0;//如果这条语句能够执行,说明不存在0元素
}
//程序我已经调试好了。集合元素你自己输入,想输入多少就输入多少,只要你的内存够大。输入以回车键结束。
TA贡献1856条经验 获得超17个赞
#include
#include
#include
#define
ELEMTYPE
int
typedef
struct
set
{
ELEMTYPE
m;
struct
set
*next;
}*NODE;
NODE
InitSet()
{
NODE
head
=
(NODE)malloc(sizeof(set));
head->next
=
NULL;
return
head;
}
bool
Insert(NODE
head,
ELEMTYPE
e)
{
//
创建增序链表
NODE
p,q;
p
=
head;
q
=
(NODE)malloc(sizeof(set));
if(q
==
NULL)
return
false;
q->m
=
e;
if(p->next
==
NULL)
{
//
直接插在头结点后
q->next
=
NULL;
p->next
=
q;
return
true;
}
while(p->next
!=
NULL)
{
if(p->next->m
==
e)
return
false;
if(p->next->m
>
e)
{
q->next
=
p->next;
p->next
=
q;
return
true;
}
p
=
p->next;
}
if(p->next
==
NULL)
{
//
插在链表尾部
p->next
=
q;
q->next
=
NULL;
}
return
true;
}
void
ShowSet(NODE
head)
{
NODE
p
=
head->next;
for(;p
!=
NULL;p
=
p->next)
printf("%d
",p->m);
printf("\n");
}
bool
InSet(NODE
head,
ELEMTYPE
e)
{
NODE
p
=
head->next;
for(;p;p
=
p->next)
if(p->m
==
e)
return
true;
return
false;
}
bool
IsEmpty(NODE
head)
{
return
(head->next
==
NULL);
}
int
SetLength(NODE
head)
{
int
n
=
0;
NODE
p
=
head->next;
for(;p;p
=
p->next)
++n;
return
n;
}
int
main()
{
NODE
set
=
InitSet();
int
i,n;
srand(time(NULL));
n
=
rand()%100
+
1;
for(i
=
0;
i
<
30;
++i)
Insert(set,rand()%60
+
1);
ShowSet(set);
printf("该集合共有%d个人元素
添加回答
举报
