数据结构(C语言)例子连载(1)====集合的交、并、差的实现

这篇博客介绍如何使用C语言实现集合的交、并、差运算。通过有序链表表示集合,包括初始化、插入节点、打印集合等基本操作,并提供了完整的代码实现。示例程序展示了用户与计算机的交互过程,用户可以输入集合内容,然后进行集合运算。
摘要由CSDN通过智能技术生成
【问题描述】
        编制一个能演示执行集合的并、交和差运算的程序
【基本要求】
       (1)集合的元素限定为小写字母字符[ 'a'......'z' ]
       (2 )演示程序以用户和计算机对话的方式执行
【测试数据】

【实现提示】
          以有序链表表示集合
【代码过程】
    1。先定义 集合的数据类型 notes.h  
         
// notes.h
typedef  struct  LNode {
    ElemType    data;
    LNode        
*next;
}
* Link,  * Position;

typedef 
struct {
    Link    head,tail;
    
int        len;
}
LinkSet;
   //~

    2。以后要用的一些常量放在   constValues.h
      
#include < stdio.h >
#include 
< malloc.h >
#include 
< stdlib.h >
// 函数结果状态代码
#define     TRUE    1
#define     FALSE    0
#define     OK        1
#define     ERROR    0
#define     INFEASIBLE    -1
#define  OVERFLOW    -2    

#define  ElemType        int         // 存放数据的类型

typedef 
int     Status;                 // 函数的返回值
   //~

    3。集合实现函数   setsFun.h

/****************** 函数定义 *********************/
Status InitSets(LinkSet 
& ls) {    
    
//初始化 集合
    ls.head = (Link) malloc( sizeof(Link));
    ls.tail 
= (Link) malloc( sizeof(Link));    
    
if(!ls.head || !ls.tail) exit(OVERFLOW);    //如果分配失败

    ls.head
->next = ls.tail->next =    NULL;        //头、尾指针为空
    ls.len = 0;                                    //长度为0    
    return OK;
}


Status CreateNode(Link 
& link,ElemType e) {
    
//创建一节点,内容为e
    link = (Link) malloc( sizeof(Link));
    
if(!link)    exit(OVERFLOW);    
    link
->data = e;                                //值设定
    link->next = NULL;                            //指向空
    return OK;
}


Position PriorInsertNode(LinkSet 
& ls,Link  & link) {
    
//找出节点link要插入到ls的前一个节点
    if(!ls.head->next) return ls.head;
    Link h1 
= ls.head->next, h2 = h1->next;            //h1:前一节点,h2:前一节点的后一节点
    if(link->data < h1->data) return ls.head;        //如果比第一个节点小,返回头指针
    while(h1 && h2){
        
if(h1->data < (link->data) && h2->data > (link->data) )    //如果>h1  && <h2,说明找到插入的地方了
            break;
        
if(h1->data == (link->data) || h2->data ==(link->data) )
            
return NULL;                            //如果重复,返回NULL
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值