1. 程式人生 > >遞增有序的順序表表示集合,求解兩個集合的交集 並集 差集(c語言實現)

遞增有序的順序表表示集合,求解兩個集合的交集 並集 差集(c語言實現)


#include<stdio.h>
#include<stdlib.h>
#define max 100
typedef struct {

    int elem[max];
    int length;

}List;
void UnionList();
void IntersectionList();
void setdifferenceList();
void DataSort(List &L, int n);
int main(){
    UnionList();
    IntersectionList();
    setdifferenceList();
    return 0;

}

//並集
void  UnionList() {
    int i, j, e;
    List La, Lb;
    printf("並集\n");
    printf("請輸入集合A,集合B元素的個數:\n");
    scanf("%d %d", &La.length, &Lb.length);
    printf("請輸入集合A的元素:\n");
    for (i = 0; i < La.length; i++){
        scanf("%d", &La.elem[i]);
    }
    printf("請輸入集合B的元素:\n");
    for (i = 0; i < Lb.length; i++){
        scanf("%d", &Lb.elem[i]);
    }
    for (i = 0; i<Lb.length; i++)
    {
        e = Lb.elem[i];
        j = 0;
        while ((j<La.length) && (La.elem[j] != e))
            j++;
        if (j == La.length){
            La.elem[La.length] = e;
            La.length++;
        }
    }
    DataSort(La, La.length);
    for (i = 0; i<La.length; i++) {
        printf("%d ", La.elem[i]);
    }
    printf("\n");

}

//交集
void IntersectionList(){
    int i, j, d = 0;
    List La, Lb, Lc;
    printf("交集\n");
    printf("請輸入集合A,集合B元素的個數:\n");
    scanf("%d %d", &La.length, &Lb.length);
    printf("請輸入集合A的元素:\n");
    for (i = 0; i < La.length; i++){
        scanf("%d", &La.elem[i]);
    }
    printf("請輸入集合B的元素:\n");
    for (i = 0; i < Lb.length; i++){
        scanf("%d", &Lb.elem[i]);
    }
    for (i = 0; i<La.length; i++) {
        for (j = 0; j<Lb.length; j++){
            if (La.elem[i] == Lb.elem[j]){
                Lc.elem[d++] = La.elem[i];
                break;
            }
        }

    }
    DataSort(Lc, d);
    for (i = 0; i<d; i++) {
        printf("%d ", Lc.elem[i]);
    }
    printf("\n");
}

//差集
void setdifferenceList() {
    int i, j, d = 0, c;
    List La, Lb, Lc;
    printf("差集\n");
    printf("請輸入集合A,集合B元素的個數:\n");
    scanf("%d %d", &La.length, &Lb.length);
    printf("請輸入集合A的元素:\n");
    for (i = 0; i < La.length; i++){
        scanf("%d", &La.elem[i]);
    }
    printf("請輸入集合B的元素:\n");
    for (i = 0; i < Lb.length; i++){
        scanf("%d", &Lb.elem[i]);
    }

    for (i = 0; i<La.length; i++) {
        c = 0;
        for (j = 0; j<Lb.length; j++){
            if (La.elem[i] != Lb.elem[j]){
                c++;
            }
        }
        if (c == Lb.length)
            Lc.elem[d++] = La.elem[i];
    }
    DataSort(Lc, d);
    for (i = 0; i<d; i++) {
        printf("%d ", Lc.elem[i]);
    }
    printf("\n");
}

//排序
void DataSort(List &L, int n) {
    int i, j, temp;
    for (i = 0; i<n - 1; i++){
        for (j = i + 1; j<n; j++){
            if (L.elem[j]<L.elem[i]) {
                temp = L.elem[j];
                L.elem[j] = L.elem[i];
                L.elem[i] = temp;
            }
        }
    }
}

相關推薦

遞增有序順序表示集合求解集合交集 c語言實現

#include<stdio.h> #include<stdlib.h> #define max 100 typedef struct {     int elem[max];     int length; }List; void UnionLi

資料結構中幾種樹的結構表示方法C語言實現

//***************************************** //樹的多種結構定義 //***************************************** #define MAX_TREE_SIZE 100 typedef int TempType;

資料結構——順序操作C語言實現

//順序表list #include"stdio.h" #define maxsize 15 typedef struct{ int a[maxsize]; int size; }list; //建立 void create(lis

順序的建立和初始化過程詳解C語言實現

順序表存放資料的特點和陣列這種資料型別完全吻合,因此順序表的實現使用的是陣列。需要注意的是,使用陣列實現順序表時,一定要預先申請足夠大的記憶體空間,避免因儲存空間不足,造成資料溢位,導致不必要的程式錯誤甚至崩潰。 在建立順序表時,除了預先申請記憶體空間,還需要實時記錄順序表的長度和順序表本身申請的記憶體大

資料結構C語言實現:判斷棵二叉樹是否相等bug求解

判斷兩棵二叉樹是否相等。 遇到了bug,求大神幫忙!!! C語言原始碼: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define OK 1 #define

資料結構學習筆記——線性順序c語言實現

1.概念 順序表即線性表的順序儲存結構 ,指的是用一段地址連續的儲存單元依次儲存線性表資料元素。線上性表中,每個資料元素的型別都相同,一般可以用一維陣列來實現順序儲存結構。 2.實現 (1)建立順序表的結構 利用c語言結構體來建立順序表的結構,順序表結構體中

資料結構學習筆記-線性順序儲存C語言實現

寫了一天,終於將線性表的順序儲存實現了,順便惡補了一下指標內容。順序儲存,適合做查詢,鏈式儲存適合做增刪。新增方法主要就是將線性表從後往前遍歷,依次往後挪一位,直到空出想要插入的位置,刪除方法就是將線性表從要刪除的地方往後遍歷,依次往前挪一位。#include <std

資料結構——順序C語言實現

定義 實現 定義結構 定義操作 建立順序表 插入元素 刪除元素 銷燬順序表 定義 資料結構是相互之間存在一種或多種特定關係的資料元素的集合。根據資料元素之間關係的不同特性,通常有如下4類基本結構: 集合:結構中的資料元素之間除了

程式設計題:給定集合集合交集

題目:給定兩個整數集合,求兩個集合的交集。 法一:排序法(先將集合排序,在找交集)             排序時間複雜度O(nlogn),對集合遍歷查詢O(n);總的時間複雜度O(nlogn); void main() { int a[] = { 1, 5, 9, 8,

靜態陣列實現順序C語言實現

在寫順序表之前我們先來了解下相關的一些知識,以便我們後期能夠寫出更好的東西。資料結構是相互之間存在一種或多種特定關係的資料元素的集合。根據資料元素之間關係的不同特性,通常有如下種基本結構:集合:結構中的元素之間除了“同屬於一個集合”的關係外,別無其他的關係。如:廣義表。線性結

數據結構-線性的鏈式存儲相關算法C語言實現

存儲位置 lib 方法 lis 逆序 順序 程序 查詢 c語言 鏈表的簡單介紹 為什麽需要線性鏈表 當然是為了克服順序表的缺點,在順序表中,做插入和刪除操作時,需要大量的移動元素,導致效率下降。 線性鏈表的分類 按照鏈接方式: 按照實現角度: 線性鏈表的創建和簡單遍歷

單鏈C語言實現學習記錄

# 單鏈表(C語言實現)學習記錄 ## 概念 ### 連結方式儲存 連結方式儲存的線性表簡稱為連結串列(Linked List)。 連結串列的具體儲存表示為: 用一組任意的儲存單元來存放線性表的結點(這組儲存單元既可以是連續的,也可以是不連續的)。 連結串列中結點的邏輯次序和物理次序不一定

列寫三角函式C語言實現

下面是用函式指標實現的三角函式表,其中cos函式、sin函式和tan函式都已經在<math.h>中定義,函式tabulate中使用的函式ceil也屬於<math.h>,當給定double型實參x時,函式ceil會返回大於或等於x的最小整數。當給定三角函式的起始值,

資料結構—— 一元多項式的表示及相加C語言實現

程式碼比較簡單,沒有完全按照嚴蔚敏版《資料結構(C語言版)》上39頁到43頁上的要求,只是實現了簡單功能,且此程式碼輸入多項式時只能按升冪的順序輸入(因為沒有寫多項式排序的函式) 個人感覺此程式碼短小精悍,且易理解,看懂了的話可以嘗試完全按照書上的要求自己寫程式

前插法建立單鏈C語言實現

#include<stdio.h> #include<stdlib.h> struct node{     int data;//結點的資料域     struct node *next;//結點的指標域 }; int main() {     str

資料結構——入棧出棧佇列相關操作C語言實現

閱讀過程之中可能會花費比較多的時間:建議直接翻到最後,有完整的程式碼可以使用 程式準備工作 #include <stdio.h> #include <malloc.h> #include <stdlib.h> #include<proc

掃雷C語言實現第一步不炸死實現展開

掃雷遊戲大家應該都有玩過,今天的我們用C語言實現一下掃雷遊戲。點開時第一步不炸死,而且沒有雷的周圍會展開。 實現思路 1.棋盤設計: 必須要設計倆個棋盤,一個設計者棋盤,一個玩家棋盤。 2.棋盤列印:     列印棋盤 3.雷的佈置 我的程式碼中採用9

學習筆記——單鏈的基本操作C語言實現

線性表的儲存結構有順序儲存結構(順序表)和鏈式儲存結構(連結串列)兩種。順序表在之前的部落格有介紹過,不明白的朋友可檢視:靜態分配順序表的基本操作及動態分配順序表的基本操作。相對於順序表來說,連結串列稍微難一些,本人花了兩天的時間認真查看了一些資料,終於大致明白了一些東西。現

單鏈的合併C語言實現

單鏈表的合併還是挺簡單的,直接上程式碼吧。 #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *PtrToNode