用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

//已知两个单链表 A 和 B 分别表示两个集合,其元素递增排列。请编写程序求集

2012-10-27 作者: 上帝是男孩举报

[c]代码库

//已知两个单链表 A 和 B 分别表示两个集合,其元素递增排列。请编写程序求集合
//A 和 B 的交集 C = A∩B,要求单链表C 按其元素递增排列,并利用原表(即表A
//和表B)的结点空间存放表C。
 
#include<stdio.h>
#include<stdlib.h>
#include<test2.h>
#include<string.h>
#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;i<len1;i++)
        InsertLinkList(A,str[i]);//将数据元素插入栈A
 
    printf("将单链表A的数据元素排序:\n");
    Order(A,len1);//为栈A的数据元素排序
    Display(A);//输出栈A的数据元素
 
    printf("输入单链表B中的数据元素:\n");
    gets(str);
    len2=strlen(str);
    for(i=0;i<len2;i++)
        InsertLinkList(B,str[i]);//将数据元素插入栈B
 
    printf("将单链表B的数据元素排序:\n");
    Order(B,len2);//为栈B排序
    Display(B);//输出栈B的数据元素
 
    printf("求集合单链表C:\n");
    ConnetLinkList(A,B,len1,len2);//联接栈A和栈B
    Display(A);//输出联接后的栈的数据元素
 
    return 0;
}
 
 
 
 
 
 
///////////////////////////////////////////
/*        test2.cpp                      */
/*    filename:test2.cpp                 */
/*    description:test2的实现文件        */
/*    designer:zhu jian                  */
/*    data:12-10-26                      */
////////////////////////////////////////////
 
 
#include"stdio.h"
#include"stdlib.h"
#include"test2.h"
#include"string.h"
 
 
LinkList *CreateLinkList(void)//创建一个结点
{
    LinkList *L;
    L=(LinkList *)malloc(sizeof(LinkList));
    if(!L)
        return NULL;
 
    L->next=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(i<len)
    {
        p=L;
        q=p->next;
        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


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...