當前位置:編程學習大全網 - 編程語言 - 設計壹個集合數據類型,並用線性表實現集合的基本操作(集合的交、並和差)要求從鍵盤輸入操作類型。

設計壹個集合數據類型,並用線性表實現集合的基本操作(集合的交、並和差)要求從鍵盤輸入操作類型。

終於做好啦!下面有幾點需要說明:

1、這個程序只能處理不超過100個數的集合;

2、同壹集合中不能有相同元素出現,差運算只求s1-s2;

3、輸入格式中,“-1”被當作結束標誌,不是有效的數字,當然有必要的話可以改成其他數值;

4、程序是循環進行的,想結束的話直接關掉Dos窗口。

VC下我已經編譯測試過,只需新建壹個“Win32 Console Application”工程,控制臺程序選擇“壹個簡單程序”,然後用下面程序覆蓋掉原來的主函數,原來的頭文件#include "stdafx.h"不能動,不然會抱錯。測試數據的過程是:

輸入集合s1的元素(輸入壹個回車壹下,-1表示結束):

5

8

78

69

21

10

-1

輸入集合s2的元素(輸入壹個回車壹下,-1表示結束):

8

75

88

32

21

76

45

69

-1

選擇s1和s2的操作類型:1、交(s1 n s2),2、並(s1 U s2),3、差(s1 - s2)

輸入對應的數字,然後回車):1

s1和s2求交運算的結果:8 69 21

選擇s1和s2的操作類型:1、交(s1 n s2),2、並(s1 U s2),3、差(s1 - s2)

輸入對應的數字,然後回車):2

s1和s2求並運算的結果:57 78 10 8 75 88 32 21 76 45 69

選擇s1和s2的操作類型:1、交(s1 n s2),2、並(s1 U s2),3、差(s1 - s2)

輸入對應的數字,然後回車):3

s1和s2求差運算的結果:5 78 10

附程序:

/////////////////////////////////////

#include<stdio.h>

#include<stdlib.h>

typedef struct node

{

int value;

}NODE;

void main()

{

int AND(NODE *s1,int count1,NODE *s2,int count2,NODE *and);

int OR(NODE *s1,int count1,NODE *s2,int count2,NODE *or);

int DIFFER(NODE *s1,int count1,NODE *s2,int count2,NODE *differ);

int count1=0;

int count2=0;

int count;

int data=0,i,j,state;

NODE *or,*and,*differ;

NODE *s1,*s2;

s1=(NODE*)malloc(100*sizeof(int));

s2=(NODE*)malloc(100*sizeof(int));

and=(NODE*)malloc(100*sizeof(int));

or=(NODE*)malloc(200*sizeof(int));

differ=(NODE*)malloc(100*sizeof(int));

printf("輸入集合s1的元素(輸入壹個回車壹下,-1表示結束):\n");

while(data!=-1)

{

scanf("%d",&data);

(s1+count1++)->value=data;

}

data=0;

printf("輸入集合s2的元素(輸入壹個回車壹下,-1表示結束):\n");

while(data!=-1)

{

scanf("%d",&data);

(s2+count2++)->value=data;

}

while(1)

{

count=0;

printf("選擇s1和s2的操作類型:1、交(s1 n s2),2、並(s1 U s2),3、差(s1 - s2)\n");

printf("(輸入對應的數字,然後回車):");

scanf("%d",&state);

switch(state)

{

case 1:

{

count=AND(s1,count1,s2,count2,and);

printf("s1和s2求交運算的結果:");

if(count==0)

printf("NULL");

else

{

for(i=0;i<count;i++)

printf(" %d",(and+i)->value);

}

break;

}

case 2:

{

count=OR(s1,count1,s2,count2,or);

printf("s1和s2求並運算的結果:");

if(count==0)

printf("NULL");

else

{

for(i=0;i<count;i++)

printf(" %d",(or+i)->value);

}

break;

}

case 3:

{

count=DIFFER(s1,count1,s2,count2,differ);

printf("s1和s2求差運算的結果:");

if(count==0)

printf("NULL");

else

{

for(i=0;i<count;i++)

printf(" %d",(differ+i)->value);

}

break;

}

}

printf("\n\n");

}

}

int AND(NODE *s1,int count1,NODE *s2,int count2,NODE *and)

{

int i,j;

int count=0;

if(count1==0||count2==0)

{

printf("NULL");

return 0;

}

else

{

for(i=0;i<count1-1;i++)

{

for(j=0;j<count2-1;j++)

{

if((s1+i)->value==(s2+j)->value)

{

(and+count++)->value=(s1+i)->value;

break;

}

}

}

}

return count;

}

int OR(NODE *s1,int count1,NODE *s2,int count2,NODE *or)

{

int i,j;

int count=0;

int sign[100];

for(i=0;i<100;i++)

sign[i]=0;

if(count1==0)

{

or=s2;

return count2;

}

else if(count2==0)

{

or=s1;

return count1;

}

else

{

for(i=0;i<count1-1;i++)

{

for(j=0;j<count2-1;j++)

{

if((s1+i)->value==(s2+j)->value)

{

sign[i]=1;

break;

}

}

}

for(i=0;i<count1-1;i++)

{

if(sign[i]!=1)

(or+count++)->value=(s1+i)->value;

}

for(i=0;i<count2-1;i++)

{

(or+count++)->value=(s2+i)->value;

}

return count;

}

}

int DIFFER(NODE *s1,int count1,NODE *s2,int count2,NODE *differ)

{

int i,j,sign;

int count=0;

if(count1==0)

{

return 0;

}

else if(count2==0)

{

differ=s1;

return count1;

}

else

{

for(i=0;i<count1-1;i++)

{

sign=0;

for(j=0;j<count2-1;j++)

{

if((s1+i)->value==(s2+j)->value)

{

sign=1;

break;

}

}

if(sign!=1)

{

(differ+count++)->value=(s1+i)->value;

}

}

return count;

}

}

  • 上一篇:如何制作HTML文件?
  • 下一篇:如何使用node模塊與npm包管理工具
  • copyright 2024編程學習大全網