数据结构课程设计——集合运算

本文介绍了使用链表数据结构来表示集合,并实现了集合的交、并、差等基本运算。文章指出当前代码存在的问题,即用户输入的集合必须连续,不能包含空格和逗号,且无法处理多位数字。作者承认已尝试解决这些问题但未成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合运算

功能:使用链表来表示集合,完成集合的交、并、差等操作。
主要包含以下内容:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2、完成最低要求:完成集合的各种基本运算;

代码

linklist.cpp

#include<stdio.h>
#include<malloc.h>

typedef char ElemType;

typedef struct LNode
{
	ElemType data;                                    //存放元素值
	struct LNode *next;                               //指向后继结点
}LinkNode;		                                      //声明单链表节点类型

void CreateListF(LinkNode *&L,ElemType a[],int n)     //头插法建立单链表
{
	LinkNode *s;
	L=(LinkNode *)malloc(sizeof(LinkNode));           //创建头结点
	L->next=NULL;                                     //创建头结点,其next域值为NULL
	for(int i=0;i<n;i++)                              //循环建立数据结点s
	{
		s=(LinkNode *)malloc(sizeof(LinkNode));       //创建新结点
		s->data=a[i];                              	  //创建数据结点s
		s->next=L->next;                              //将结点s插在原开始结点之前,头结点之后
		L->next=s;
	}
}

void CreateListR(LinkNode *&L,ElemType a[],int n)     //尾插法建立单链表
{
	LinkNode *s,*r;
	L=(LinkNode *)malloc(sizeof(LinkNode));           //创建头结点
	L->next=NULL;
	r=L;			                                  //r始终指向尾结点,开始是指向头结点
	for(int i=0;i<n;i++)                              //循环建立数据结点s
	{
		s=(LinkNode *)malloc(sizeof(LinkNode));       //创建新结点s
		s->data=a[i];                                 //创建数据结点s
		r->next=s;                                    //将结点s插入r结点之后
		r=s;
	}
	r->next=NULL;                                     //尾结点的next域值为NULL
}

void InitList(LinkNode *&L)                           //初始化线性表
{
	L=(LinkNode*)malloc(sizeof(LinkNode));            //创建头结点
	L->next=NULL;                                     //创建头结点,其next域值为NULL
}

void DestroyList(LinkNode *&L)                        //销毁线性表
{
	LinkNode *pre=L, *p=pre->next;                    //pre指向结点p的前驱结点
	while(p!=NULL)                                    //扫描单链表L
	{
		free(pre);                                    //释放pre结点
		pre=p;                                        //pre和p同步后移一个结点
		p=pre->next;
	}
	free(pre);                                        //循环结束时p为NULL,pre指向尾结点,释放它
}

bool ListEmpty(LinkNode *L)                           //判断线性表是否为空
{
	return(L->next=&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值