帮忙看看我的程序有没有问题,这是一个关于集合运算的链表实现。。

feiqingchun 2004-08-29 08:25:28
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <conio.h>
#include <string.h>
typedef struct Point{
char Data;
struct Point *Next;
};
typedef struct Collection{
char CollectionName;
int PointNumber;
struct Point *CollectionData;
};

void Show(struct Collection *C){
struct Point *p=C->CollectionData;
printf("\n CollectionName: %c",C->CollectionName);
printf("\n Number of Points: %d ",C->PointNumber);
while(p){
printf("-> %c",p->Data);
p=p->Next;}
printf("\n");
}

int CheckPoint(struct Collection *C, char ch){
struct Point *p=C->CollectionData;
while(p){
if(p->Data==ch)
return(1); /*exist*/
p=p->Next;
}
return(0); /*not exist*/
}

int AddPoint(struct Collection *C,struct Point *P){
if(CheckPoint(C,P->Data))
return (0);/*exist need not adding Point*/
P->Next=C->CollectionData;
C->CollectionData=P;
++C->PointNumber;
return (1) ;/*not exist needing adding */
}

void CAndC (struct Collection *CB, struct Collection *CA){
/*The result is in CB */
struct Point *Pb=CB->CollectionData;

while(Pb->Next){
if(CheckPoint(CA,Pb->Next->Data)==1)
Pb=Pb->Next;
else{
Pb->Next=Pb->Next->Next;
--CB->PointNumber;
}
}
if(CB-> CollectionData&&(CheckPoint(CA,CB->CollectionData->Data)==0)){
CB->CollectionData=CB->CollectionData->Next;
--CB->PointNumber;
}

}

void COrC(struct Collection *CA, struct Collection *CB){
/*destroy CB and the result is in CA*/
struct Point * Ps=NULL; while(CB->CollectionData){
Ps=CB->CollectionData;
CB->CollectionData= CB->CollectionData->Next;
if(AddPoint(CA,Ps))
++CA->PointNumber;
/*deal with the memory
else {
free(Ps->Data);
free(Ps->Next);
}
*/
--CB->PointNumber;
}
}

void CSubC(struct Collection *CA, struct Collection *CB){
/*the result is CA*/
struct Point *Pb=CA->CollectionData;
if(CB->CollectionData&&(CheckPoint(CA,CB->CollectionData->Data)==1)){
CB->CollectionData= CB->CollectionData->Next;
--CB->PointNumber;
}
while(Pb->Next){
if(CheckPoint(CA,Pb->Next->Data)==0)
Pb=Pb->Next;
else{
Pb->Next=Pb->Next->Next;
--CB->PointNumber;
}
}
if(CB->PointNumber==0)
CB->CollectionData=NULL;
}

void CreateCollection(struct Collection *A,char Name ,int Number)
{ A->CollectionName=Name;
A->PointNumber=Number;
A->CollectionData=NULL;
}

int CBelongC(struct Collection *CA,struct Collection *CB){
struct Point *Pb=CB->CollectionData;
while(Pb){
if(CheckPoint(CA,Pb->Data)==0)
return(0);
Pb=Pb->Next;}
return(1) ;
}

int PBelongC(struct Point *P,struct Collection *C){
return(CheckPoint(C,P->Data));
}

int PDeleteC( struct Point *P,struct Collection *C){
struct Collection *A=(struct Collection *)malloc(sizeof(struct Collection));
struct Point *pt=(struct Point *)malloc(sizeof(struct Point));
int i=0;
A->PointNumber=0;
pt->Next=NULL;
pt->Data=P->Data;
i=AddPoint(A,pt);
CSubC(C,A);
return(CheckPoint(C,P->Data));
}
void SortC(struct Collection *C){
char c;
struct Point *Pa,*Pb=C->CollectionData;
Pa=Pb;
while(Pa){
Pb=Pa;
while(Pb){
if(Pb->Data < Pa->Data){
c=Pa->Data;
Pa->Data=Pb->Data;
Pb->Data=c; }

Pb=Pb->Next;
}
Pa=Pa->Next;
}
}
void SCAndSC(struct Collection *CA,struct Collection *CB){、
/* S开头是有序 */
struct Point *Pa=CA->CollectionData;
struct Point *Pb=CB->CollectionData;
if(CA->CollectionData&&(CheckPoint(CB,CA->CollectionData->Data)==0)){
CA->CollectionData=CA->CollectionData->Next;
--CA->PointNumber;
}
while((Pa->Next!=NULL) ||(Pb!=NULL)) {
if(Pa->Next->Data==Pb->Data)
Pa=Pa->Next;
else {
Pa->Next=Pa->Next->Next;
--CA->PointNumber;
}
Pb=Pb->Next;
}
if(CA->PointNumber==0)
CA->CollectionData=NULL;
}

void SCOrSC(struct Collection *CA,struct Collection *CB){
struct Point *Pa=CA->CollectionData;
struct Point *Pb=CB->CollectionData;
}

main()
{ struct Collection *A, *B,*C;
int k,f,PointN;
int ICNB=0;
struct Point *p=NULL;
clrscr();
A=B=NULL;

A=(struct Collection *)malloc(sizeof(struct Collection));
printf("please input CollectionName:");
A->CollectionName=getche();
printf("\n CollectionName : %c ",A->CollectionName);
printf("\n PointNumber:");
scanf("%d",&ICNB);
printf("%d\n",ICNB);
A->PointNumber=ICNB;
A->CollectionData=NULL;
for (k=1;k<=ICNB;k++){
p=(struct Point *)malloc(sizeof(struct Point));
p->Next=NULL;
printf("\n input PointData : ");
p->Data=getche();
printf("\n time %d : \n",k);
if (AddPoint(A,p)==0) {
--k;
printf("\n the data exist!!!\n");}
}
Show(A);
B=A;
A=(struct Collection *)malloc(sizeof(struct Collection));
printf("please input CollectionName:");
A->CollectionName=getche();
printf("\n CollectionName : %c ",A->CollectionName);
printf("\n PointNumber:");
scanf("%d",&ICNB);
A->PointNumber=ICNB;
A->CollectionData=NULL;
for (k=1;k<=ICNB;k++){
p=(struct Point *)malloc(sizeof(struct Point));
p->Next=NULL;
printf("\n input PointData : ");
p->Data=getche();
printf("\n time %d : \n",k);
if (AddPoint(A,p)==0) {
--k;
printf("\n the data exist!!!\n");}
}
Show(A);
/* SWAP A B */
C=A;
A=B;
B=C;
C=NULL;
SortC(A);
SortC(B);
Show(A);
Show(B);
CAndC(A,B);
k=CBelongC(A,B);
printf(" %d \n",k);
Show(A);
Show(B);
getch();
clrscr();
getch();
}



...全文
118 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiqingchun 2004-09-11
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <conio.h>
#include <string.h>
/* DATASTRUCTURE */
typedef struct Point{
char Data;
struct Point *Next;
};
typedef struct Collection{
char CollectionName;
int PointNumber;
struct Point *CollectionData;
};

void CreateCollection (struct Collection *A,char Name ,int Number){
A->CollectionName=Name;
A->PointNumber=Number;
A->CollectionData=NULL;
}

void Show (struct Collection *C){
struct Point *p=C->CollectionData;
printf("\n CollectionName: %c",C->CollectionName);
printf("\n Number of Points: %d ",C->PointNumber);
while(p){
printf("-> %c",p->Data);
p=p->Next;
}
printf("\n");
}

void SortC(struct Collection *C){
char c;
struct Point *Pa,*Pb=C->CollectionData;
Pa=Pb;
while(Pa){
Pb=Pa;
while(Pb){
if(Pb->Data < Pa->Data){
c=Pa->Data;
Pa->Data=Pb->Data;
Pb->Data=c; }

Pb=Pb->Next;
}
Pa=Pa->Next;
}
}

int CBelongC (struct Collection *CA,struct Collection *CB){
struct Point *Pb=CB->CollectionData;
while(Pb){
if(CheckPoint (CA,Pb->Data)==0)
return(0);
Pb=Pb->Next;
}
return(1) ;
}

int PBelongC (struct Point *P,struct Collection *C){
return(CheckPoint (C,P->Data));
}

int CheckPoint (struct Collection *C, char ch){
struct Point *p=C->CollectionData;
while(p){
if(p->Data==ch)
return(1); /*exist*/
p=p->Next;
}
return(0); /*not exist*/
}

int AddPoint (struct Collection *C,struct Point *P){
if(CheckPoint (C,P->Data))
return (0);/*exist need not adding Point*/
P->Next=C->CollectionData;
C->CollectionData=P;
++C->PointNumber;
return (1) ;/*not exist needing adding */
}
/*
int DeletePoint (struct Collection *C,struct Point *P){
struct Collection *A=(struct Collection *)malloc(sizeof(struct Collection));
struct Collection *CC=C;
struct Point *pt=(struct Point *)malloc(sizeof(struct Point));
int i=0;
A->PointNumber=0;
pt->Next=NULL;
pt->Data=P->Data;
i=AddPoint (A,pt);
CSubC (CC,A);
return( CheckPoint (C,P->Data));
}
*/
void CAndC (struct Collection *CB,struct Collection *CA){
/*Destroy CB,CA. CB=CA&&CB */
struct Point *Pb=CB->CollectionData;
while((Pb->Next)&&Pb){
if(CheckPoint(CA,Pb->Next->Data)==1)
Pb=Pb->Next;
else{
Pb->Next=Pb->Next->Next;
--CB->PointNumber;
}
}
if(CB->CollectionData&&(CheckPoint(CA,CB->CollectionData->Data)==0)){
CB->CollectionData=CB->CollectionData->Next;
--CB->PointNumber;
}
}

void COrC(struct Collection *CA, struct Collection *CB){
/*destroy CB and CA; CA=CA||CB */
struct Point * Ps=NULL;
while(CB->CollectionData){
Ps=CB->CollectionData;
CB->CollectionData=CB->CollectionData->Next;
if(AddPoint(CA,Ps))
++CA->PointNumber;
/* deal with the memory else { free(Ps->Data); free(Ps->Next); } */
--CB->PointNumber;
}
}

void CSubC (struct Collection *CB,struct Collection *CA){
/* Destroy CB,retain CA CB=CB-CA */
struct Point *Pb=CA->CollectionData;
while((Pb->Next)&&Pb){
if(CheckPoint(CA,Pb->Next->Data)==0)
Pb=Pb->Next;
else{
Pb->Next=Pb->Next->Next;
--CB->PointNumber;
}
}
if(CB->CollectionData&&(CheckPoint(CA,CB->CollectionData->Data)==1)){
CB->CollectionData= CB->CollectionData->Next;
--CB->PointNumber;
}
}

void SCAndSC(struct Collection *CA,struct Collection *CB){
/*destroy CA,and retain CB; CA=CA&&CB*/
struct Point *Pa=CA->CollectionData;
struct Point *Pb=CB->CollectionData;
while(((Pa->Next!=NULL)&&Pa) ||(Pb!=NULL)) {
if(Pa->Next->Data==Pb->Data)
Pa=Pa->Next;
else {
Pa->Next=Pa->Next->Next;
--CA->PointNumber;
}
Pb=Pb->Next;
}
if(CA->CollectionData&&(CheckPoint(CB,CA->CollectionData->Data)==0)){
CA->CollectionData=CA->CollectionData->Next;
--CA->PointNumber;
}
printf("the first was destroied\n");
}

void SCOrSC(struct Collection *CA,struct Collection *CB){
/* DESTROY CB,CA. CA=CA||CB*/
struct Point *Pa=CA->CollectionData;
struct Point *Pb=CB->CollectionData;
struct Point *Pc;
Pc=Pa;
while (Pa&&Pb) {
if(Pa->Data<Pb->Data){
Pc=Pa;
Pa=Pa->Next;
}
else if(Pa->Data==Pb->Data){
Pc=Pa;
Pa=Pa->Next;
Pb=Pb->Next;
--CB->PointNumber;
}
else {
Pc->Next=Pb;
Pb=Pb->Next;
Pc=Pc->Next;
Pc->Next=Pa;
++CA->PointNumber;
--CB->PointNumber;
}
}
if(Pb){
Pc->Next=Pb;
CA->PointNumber=CA->PointNumber+CB->PointNumber;
CB->PointNumber=0;
}
CB->CollectionData=NULL;
printf("The first and second Collection are destoried/n");

}

main()
{ struct Collection *A, *B,*C;
int k,f,PointN;
int ICNB=0;
struct Point *p=NULL;
clrscr();
A=B=NULL;
A=(struct Collection *)malloc(sizeof(struct Collection));
printf("please input CollectionName:");
A->CollectionName=getche();
printf("\n CollectionName : %c ",A->CollectionName);
printf("\n PointNumber:");
scanf("%d",&ICNB);
printf("%d\n",ICNB);
A->PointNumber=0;
A->CollectionData=NULL;
for (k=1;k<=ICNB;k++){
p=(struct Point *)malloc(sizeof(struct Point));
p->Next=NULL;
printf("\n input PointData : ");
p->Data=getche();
printf("\n time %d : \n",k);
if (AddPoint(A,p)==0) {
--k;
printf("\n the data exist!!!\n");}
}
Show(A);
B=A;
A=(struct Collection *)malloc(sizeof(struct Collection));
printf("please input CollectionName:");
A->CollectionName=getche();
printf("\n CollectionName : %c ",A->CollectionName);
printf("\n PointNumber:");
scanf("%d",&ICNB);
A->PointNumber=0;
A->CollectionData=NULL;
for (k=1;k<=ICNB;k++){
p=(struct Point *)malloc(sizeof(struct Point));
p->Next=NULL;
printf("\n input PointData : ");
p->Data=getche();
printf("\n time %d : \n",k);
if (AddPoint(A,p)==0) {
--k;
printf("\n the data exist!!!\n");}
}
Show(A);

/* SWAP A B */
C=A;
A=B;
B=C;
C=NULL;

SortC(A);
SortC(B);
Show(A);
Show(B);
getch();
CSubC(A,B);
getch();
k=CBelongC(A,B);
printf(" %d \n",k);
Show(A);
Show(B);
getch();
clrscr();
getch();
}




/* it is new */
feiqingchun 2004-09-04
  • 打赏
  • 举报
回复
我可能在编辑中丢了,回头再来;)
programfanny 2004-09-01
  • 打赏
  • 举报
回复
void SCOrSC(struct Collection *CA,struct Collection *CB){
struct Point *Pa=CA->CollectionData;
struct Point *Pb=CB->CollectionData;
// How to do it? <============================
}

要结贴的话,点下方 管理|关闭窗口 中的 管理
feiqingchun 2004-08-31
  • 打赏
  • 举报
回复
怎样给你加分?
feiqingchun 2004-08-31
  • 打赏
  • 举报
回复
programfanny 请帮我测试函数是否有隐含的问题,我的例子有自己的局限性,摆脱啦:)
programfanny 2004-08-30
  • 打赏
  • 举报
回复
通过了。
programfanny 2004-08-30
  • 打赏
  • 举报
回复
以下这段在VC6.0控制台下可以。但没有显示结果。
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <conio.h>
#include <string.h>
typedef struct Point{
char Data;
struct Point *Next;
};
typedef struct Collection{
char CollectionName;
int PointNumber;
struct Point *CollectionData;
};

void Show(struct Collection *C){
struct Point *p=C->CollectionData;
printf("\n CollectionName: %c",C->CollectionName);
printf("\n Number of Points: %d ",C->PointNumber);
while(p){
printf("-> %c",p->Data);
p=p->Next;}
printf("\n");
}

int CheckPoint(struct Collection *C, char ch){
struct Point *p=C->CollectionData;
while(p){
if(p->Data==ch)
return(1); /*exist*/
p=p->Next;
}
return(0); /*not exist*/
}

int AddPoint(struct Collection *C,struct Point *P){
if(CheckPoint(C,P->Data))
return (0);/*exist need not adding Point*/
P->Next=C->CollectionData;
C->CollectionData=P;
++C->PointNumber;
return (1) ;/*not exist needing adding */
}

void CAndC (struct Collection *CB, struct Collection *CA){
/*The result is in CB */
struct Point *Pb=CB->CollectionData;

while(Pb->Next){
if(CheckPoint(CA,Pb->Next->Data)==1)
Pb=Pb->Next;
else{
Pb->Next=Pb->Next->Next;
--CB->PointNumber;
}
}
if(CB-> CollectionData&&(CheckPoint(CA,CB->CollectionData->Data)==0)){
CB->CollectionData=CB->CollectionData->Next;
--CB->PointNumber;
}

}

void COrC(struct Collection *CA, struct Collection *CB){
/*destroy CB and the result is in CA*/
struct Point * Ps=NULL; while(CB->CollectionData){
Ps=CB->CollectionData;
CB->CollectionData= CB->CollectionData->Next;
if(AddPoint(CA,Ps))
++CA->PointNumber;
/*deal with the memory
else {
free(Ps->Data);
free(Ps->Next);
}
*/
--CB->PointNumber;
}
}

void CSubC(struct Collection *CA, struct Collection *CB){
/*the result is CA*/
struct Point *Pb=CA->CollectionData;
if(CB->CollectionData&&(CheckPoint(CA,CB->CollectionData->Data)==1)){
CB->CollectionData= CB->CollectionData->Next;
--CB->PointNumber;
}
while(Pb->Next){
if(CheckPoint(CA,Pb->Next->Data)==0)
Pb=Pb->Next;
else{
Pb->Next=Pb->Next->Next;
--CB->PointNumber;
}
}
if(CB->PointNumber==0)
CB->CollectionData=NULL;
}

void CreateCollection(struct Collection *A,char Name ,int Number)
{ A->CollectionName=Name;
A->PointNumber=Number;
A->CollectionData=NULL;
}

int CBelongC(struct Collection *CA,struct Collection *CB){
struct Point *Pb=CB->CollectionData;
while(Pb){
if(CheckPoint(CA,Pb->Data)==0)
return(0);
Pb=Pb->Next;}
return(1) ;
}

int PBelongC(struct Point *P,struct Collection *C){
return(CheckPoint(C,P->Data));
}

int PDeleteC( struct Point *P,struct Collection *C){
struct Collection *A=(struct Collection *)malloc(sizeof(struct Collection));
struct Point *pt=(struct Point *)malloc(sizeof(struct Point));
int i=0;
A->PointNumber=0;
pt->Next=NULL;
pt->Data=P->Data;
i=AddPoint(A,pt);
CSubC(C,A);
return(CheckPoint(C,P->Data));
}
void SortC(struct Collection *C){
char c;
struct Point *Pa,*Pb=C->CollectionData;
Pa=Pb;
while(Pa){
Pb=Pa;
while(Pb){
if(Pb->Data < Pa->Data){
c=Pa->Data;
Pa->Data=Pb->Data;
Pb->Data=c; }
Pb=Pb->Next;
}
Pa=Pa->Next;
}
}
void SCAndSC(struct Collection *CA,struct Collection *CB){
/* S开头是有序 */
struct Point *Pa=CA->CollectionData;
struct Point *Pb=CB->CollectionData;
if(CA->CollectionData&&(CheckPoint(CB,CA->CollectionData->Data)==0)){
CA->CollectionData=CA->CollectionData->Next;
--CA->PointNumber;
}
while((Pa->Next!=NULL) ||(Pb!=NULL)) {
if(Pa->Next->Data==Pb->Data)
Pa=Pa->Next;
else {
Pa->Next=Pa->Next->Next;
--CA->PointNumber;
}
Pb=Pb->Next;
}
if(CA->PointNumber==0)
CA->CollectionData=NULL;
}

void SCOrSC(struct Collection *CA,struct Collection *CB){
struct Point *Pa=CA->CollectionData;
struct Point *Pb=CB->CollectionData;
}

void main()
{ struct Collection *A, *B,*C;
int k,f,PointN;
int ICNB=0;
struct Point *p=NULL;
//clrscr();
A=B=NULL;

A=(struct Collection *)malloc(sizeof(struct Collection));
printf("please input CollectionName:");
A->CollectionName=getche();
printf("\n CollectionName : %c ",A->CollectionName);
printf("\n PointNumber:");
scanf("%d",&ICNB);
printf("%d\n",ICNB);
A->PointNumber=ICNB;
A->CollectionData=NULL;
for (k=1;k<=ICNB;k++){
p=(struct Point *)malloc(sizeof(struct Point));
p->Next=NULL;
printf("\n input PointData : ");
p->Data=getche();
printf("\n time %d : \n",k);
if (AddPoint(A,p)==0) {
--k;
printf("\n the data exist!!!\n");}
}
Show(A);
B=A;
A=(struct Collection *)malloc(sizeof(struct Collection));
printf("please input CollectionName:");
A->CollectionName=getche();
printf("\n CollectionName : %c ",A->CollectionName);
printf("\n PointNumber:");
scanf("%d",&ICNB);
A->PointNumber=ICNB;
A->CollectionData=NULL;
for (k=1;k<=ICNB;k++){
p=(struct Point *)malloc(sizeof(struct Point));
p->Next=NULL;
printf("\n input PointData : ");
p->Data=getche();
printf("\n time %d : \n",k);
if (AddPoint(A,p)==0) {
--k;
printf("\n the data exist!!!\n");}
}
Show(A);
/* SWAP A B */
C=A;
A=B;
B=C;
C=NULL;
SortC(A);
SortC(B);
Show(A);
Show(B);
CAndC(A,B);
k=CBelongC(A,B);
printf(" %d \n",k);
Show(A);
Show(B);
getch();
// clrscr();
getch();
}

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧