• 大小: 8KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: C/C++
  • 标签: 集合  C++  运算  

资源简介

1.编制一个能演示执行集合的并、交和差运算的程序。 2.集合的元素限定为小写字母符[′a′….′z ′],集合的大小n<27。 3.集合输入的形式为一个以"回车符"为结束标志的字符串,串中字符顺序不限,且允许出现重复字符或非法字符,程序应能自动滤去。 4.输出的运算结果字符串中将不含重复字符或非法字符。 5.演示程序以用户和计算机的对话方式执行。

资源截图

代码片段和文件信息

// 集合的并交差运算.cpp : 定义控制台应用程序的入口点。

// 编写环境:VS2013

#include “stdafx.h“
#include “stdio.h“ //提供清除输入缓存的函数
#include //提供设置输出格式的函数
#include 

using namespace std;

#define SIZE sizeof(Node) 
#define FALSE 0 
#define TRUE 1 

//定义节点结构
typedef struct Node{
char data;
Node *next;
}Node *linkList;

//检查选定字符能否添加到集合中
int Check(char ch linkList Head)
{
Node *temp = Head->next;
int flag = TRUE;
while (temp != NULL)
{
if (temp->data == ch){
//选定字符不能插入集合中
flag = FALSE;
return flag;
}
temp = temp->next;
}
return flag;
}

//检查集合A中的元素,集合B中是否存在 
int IsExist(char data linkList Head)
{
Node *pt = Head->next;
int flag = FALSE;
while (pt != NULL)
{
if (pt->data == data)
//已存在
return flag = TRUE;
pt = pt->next;
}
return flag;
}

//检查集合A中的元素,集合B中是否存在
int IsExist2(char data linkList Head)
{
Node *p = Head->next;
int flag = FALSE;
while (p != NULL)
{
if (p->data == data)
return flag;
p = p->next;
}
return flag = TRUE;
}

//初始化集合 
linkList InitlinkList()
{
int i = 1;
int ch_1;
char ch;
linkList Head = (Node*)malloc(SIZE);
Head->data = ‘\0‘; Head->next = NULL;
Node *p = Head;
cin >> ch;
// ‘#’ 手动终止输入,当输入满26个字符时,自动终止输入
while (ch != ‘#‘ && i <= 26)
{
ch_1 = (int)ch;

//只录入26个小写字母,实现输入过滤
if (ch_1 <= 122 && ch_1 >= 97){
if (Check(ch Head) == TRUE)
{
i++;
Node *newNode = (Node*)malloc(SIZE);
newNode->data = ch;
cout << ch << setw(3) << “++“;
p->next = newNode;
p = newNode;
p->next = NULL;
}
else
{
cout << ch << setw(4) << “--“;
}
}
else
{
cout << ch << setw(4) << “--“;
}
if (i == 26)
{
cout << “集合已满“ << endl;
}
cin >> ch;
}
p->next = NULL;

//清空输入缓存数据,防止多余输入内容满溢到下一个集合
fflush(stdin);
cout << endl << endl;
return Head;
}

//将表中元素进行排序 
void Sort(linkList head)
{
Node *p = head->next *q *r;
if (p != NULL)
{
r = p->next;
p->next = NULL;
p = r;
while (p != NULL)
{
r = p->next;
q = head;
while (q->next != NULL&&q->next->datadata)
q = q->next; //在有序表中查找插入*p的前驱结点*q
p->next = q->next; //将*p插到*q之前
q->next = p;
p = r;
}
}
}

//集合并运算
linkList Merge(linkList Head1 linkList Head2)
{
linkList Head = (Node*)malloc(SIZE);
Head->data = ‘\0‘; Head->next = NULL;
Node *p1 = Head1->next;
Node *p2 = Head2->next;
Node *p = Head;

while (p1 != NULL&&p2 != NULL)
{
if (p1->data == p2->data)
{
if (Check(p1->data Head) == TRUE)
{
Node *newNode = (Node*)malloc(SIZE);
newNode->data = p1->data;
p->next = newNode;
p = newNode;
p->next = NULL;
}
}
else
{
if (Check(p1->data Head) == TRUE)
{
Node *newNode = (Node*)malloc(SIZE);
newNode->data = p1->data;
p->next = newNode;
p = newNode;
p->next = NULL;
}
if (Check(p2->data Head) == TRUE)

评论

共有 条评论