ช่วยดูโปรแกรมให้ที่ครับ

เขียนโปรแกรมด้วยภาษา C++ เก็บขอ้มูลเซต A = {2, 3, 6, 1, 5, …}และ เซต B = {1,
3, 8, 2, 9, …} ซึ่งแต่ละเซตมีเงื่อนไขดงัน้ี
1. เป็ นเซตของจ านวนเต็มบวก
2. สามารถเพิ่มสมาชิกไดไ้ม่จา กดั
3. มีการจัดเรียงล าดับของสมาชิก
4. มีสมาชิกที่แต่ละตวัไม่ซ้า กัน


โจทมีอยู่ว่า C = P(A) และ C = P(B)


คือตอนนี้ติดอยู่ที่สูตรการหา  power set  ต้องใส่สูตรูใน เคส 10 11 อะครับ

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

typedef struct node{
int data;
struct node *next;
}member;
node *SetA = NULL,*SetB = NULL;
node *endSetA = NULL, *endSetB = NULL;
void printlist(member *ptr);
void printnode(member *ptr);
member * initnode( int data);
member * searching(member *ptr, int keyword);
void insertnode(member *&SetName,member *&endSet, member *ptr);
void delnode(member *&SetName, member *&endSet, member *ptr);
void delall(member *&SetName, member *&endSet);
main(){
    
int data, ch = 1;
member *tmp;

while( ch != 0 ) {
printf("1 list all node \n");
printf("2 insert to SetA\n");
printf("3 insert to SetB\n");
printf("4 print all SetA \n");
printf("5 print all SetB \n");
printf("6 searching member in SetA \n");
printf("7 searching member in SetB \n");
printf("8 delete member in SetA \n");
printf("9 delete member in SetB \n");
printf("10 Set C = P(A) \n");
printf("11 Set C = P(B) \n");
printf("0 quit\n");
scanf("%d", &ch );
switch( ch )
{

case 1:
printf("Set A: ");
printlist(SetA);
printf("Set B: ");
printlist(SetB);
break;

case 2:
printf("Enter in member SetA: ");
scanf("%d",&data);
tmp = initnode(data);
insertnode(SetA, endSetA,tmp);
break;

case 3:
printf("Enter in member SetB: ");
scanf("%d",&data);
tmp = initnode(data);
insertnode(SetB, endSetB,tmp);
break;

case 4:
printf("Set A: ");
printlist(SetA);
break;

case 5:
printf("Set B: ");
printlist(SetB);
break;

case 6:
printf("Enter member for Search: ");
scanf("%d",&data);
tmp = searching(SetA, data);
if(tmp == NULL){
printf("Set A = {not found }\n");
}else{
printf("Set A = {");
printnode(tmp);
printf(" }\n");
}
break;

case 7:
printf("Enter member for Search: ");
scanf("%d",&data);
tmp = searching(SetB, data);
if(tmp == NULL){
printf("Set B = {not found }\n");
}else{
printf("Set B = {");
printnode(tmp);
printf(" }\n");
}
break;

case 8:
printf("Enter member for del: ");
scanf("%d",&data);
tmp = searching(SetA, data);
if(tmp == NULL){
printf("Set A = {not found }\n");
}else{
delnode(SetA,endSetA,tmp);
printf("member delete complete\n");
}
break;

case 9:
printf("Enter member for del: ");
scanf("%d",&data);
tmp = searching(SetB, data);
if(tmp == NULL){
printf("Set B = {not found }\n");
}else{
delnode(SetB,endSetB,tmp);
printf("member delete complete\n");
}
break;

case 10:

case 11:
printf("Enter member for del: ");
scanf("%d",&data);
tmp = searching(SetB, data);
if(tmp == NULL){
printf("Set B = {not found }\n");
}else{
delnode(SetB,endSetB,tmp);
printf("member delete complete\n");
}
break;
}
}
delall(SetA,endSetA);
delall(SetB,endSetB);
}
member * initnode( int data){
node *ptr;
ptr = new member;
if(ptr == NULL)
return NULL;
else{
ptr->data = data;
return ptr;
}
}

void printnode(member *ptr){
printf("%d",ptr->data);
}
void printlist(member *ptr){
printf("{");
while(ptr != NULL){
printnode(ptr);
ptr = ptr->next;
printf(", ");
}
printf("}\n");
}
member * searching(member *ptr, int keyword){
while(keyword!= ptr->data){
ptr = ptr->next;
if(ptr == NULL)
break;
}
return ptr;
}
void insertnode(member *&SetName,member *&endSet, member *ptr){
member *curr, *prev;
if(SetName == NULL){
SetName = ptr;
endSet = ptr;
ptr->next = NULL;
return;
}
curr = SetName;
while(curr->data < ptr->data){
curr = curr->next;
if(curr == NULL)
break;
}
if(curr != NULL)
if(curr->data == ptr->data) return;
if(curr == SetName){
ptr->next = SetName;
SetName = ptr;
}else{
prev = SetName;
while(prev->next != curr){
prev = prev->next;
}
prev->next = ptr;
ptr->next = curr;
if(endSet == prev)
endSet = ptr;
}
}
void delnode(member *&SetName, member *&endSet, member *ptr){
member *curr, *prev;
curr = ptr;
prev = SetName;
if(curr == prev){
SetName = SetName->next;
if(endSet == curr)
endSet = endSet->next;
free(curr);
}else{
while(prev->next != curr){
prev = prev->next;
}
prev->next = curr->next;
if(endSet == curr)
endSet = prev;
free(curr);
}
}
void delall(member *&SetName, member *&endSet){
member *tmp,*ptr;
tmp = SetName;
ptr = SetName;
if(tmp == NULL)
return;
else{
while(ptr != NULL){
ptr = ptr->next;
free(tmp);
tmp = ptr;
}
SetName = NULL;
endSet = NULL;
}
}
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่