为了账号安全,请及时绑定邮箱和手机立即绑定

想要实现用单链表表示一个集合,元素类型为int且以递增方式储存的内容?该怎么做?

想要实现用单链表表示一个集合,元素类型为int且以递增方式储存的内容?该怎么做?

忽然笑 2022-05-08 08:04:09
c语言题目,用单链表表示一个集合,元素类型为int且以递增方式储存,用函数in_set测试集合中是否存在元素0,若存在则结果输出0,反之输出1单链其头结点分别为a,b
查看完整描述

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;
}



查看完整回答
反对 回复 2022-05-10
?
慕尼黑的夜晚无繁华

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元素
}
//程序我已经调试好了。集合元素你自己输入,想输入多少就输入多少,只要你的内存够大。输入以回车键结束。



查看完整回答
反对 回复 2022-05-10
?
慕慕森

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个人元素



查看完整回答
反对 回复 2022-05-10
  • 3 回答
  • 0 关注
  • 217 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号