//已知两个单链表 A 和 B 分别表示两个集合,其元素递增排列。请编写程序求集合 //A 和 B 的交集 C = A∩B,要求单链表C 按其元素递增排列,并利用原表(即表A //和表B)的结点空间存放表C。 #include #include #include #include #define Max 100 int main() { int i,len1,len2; char str[Max]; LinkList *A,*B; A=CreateLinkList(); //为栈A创建一个链表指针 B=CreateLinkList(); //为栈B创建一个链表指针 InitLinkList(A);//初始化栈A InitLinkList(B);//初始化栈B printf("输入单链表A的数据元素:\n"); gets(str); len1=strlen(str); for(i=0;inext=NULL; return L; } void InitLinkList(LinkList *L)//初始化链表 { LinkList *p; p=L; if(!L) return ; p->data=0; } unsigned char InsertLinkList(LinkList *L,elemtype e)//插入结点元素 { LinkList *p,*q; p=L; if(!L) return ERROR; while(p->next!=NULL) p=p->next; q=(LinkList *)malloc(sizeof(LinkList)); q->data=e; p->next=q; q->next=NULL; return OK; } unsigned char Order(LinkList *L,int len)//排序 { int i=0; elemtype k; LinkList *p,*q; p=L; if(!L) return ERROR; q=p->next; while(inext; while(p->next != NULL) if(p->data > q->data) { k=p->data; p->data=q->data; q->data=k; p=p->next; q=q->next; } else { p=p->next; q=q->next; } i++; } return OK; } unsigned char ConnetLinkList(LinkList *L,LinkList *S,int len1,int len2)//联接单链表A和单链表B { int len; LinkList *p,*q; p=L; q=S; if(!L || !S) return ERROR; len=len1+len2; while(p->next != NULL) p=p->next; p->next=q->next; Order(L,len); return OK; } unsigned char Display(LinkList *L)//输出单链表的数据元素 { LinkList *p; p=L->next; if(!L) return ERROR; while(p->next != NULL) { printf("%c",p->data); p=p->next; } printf("%c\n",p->data); return OK; } /////////////////////////////////////////// /* test2.h */ /* filename:test2.h */ /* description:test2的头文件 */ /* designer:zhu jian */ /* data:12-10-26 */ //////////////////////////////////////////// #ifndef _DATA_STRUCTURE_TEST2_H_ #define _DATA_STRUCTURE_TEST2_H_ #ifndef OK #define OK 1 #endif #ifndef ERROR #define ERROR -1 #endif #ifndef NULL #define NULL 0 #endif typedef char elemtype; //定义用elemtype取代char typedef struct node{ elemtype data; struct node *next; }LinkList; LinkList *CreateLinkList(void);//创建一个结点 void InitLinkList(LinkList *L);//初始化链表 unsigned char InsertLinkList(LinkList *L,elemtype e);//插入结点元素 unsigned char Order(LinkList *L,int len);//排序 unsigned char ConnetLinkList(LinkList *L,LinkList *S,int len1,int len2);//联接单链表A和单链表B unsigned char Display(LinkList *L);//输出单链表的数据元素 #endif