データ構造【線形テーブル(二)チェーンテーブル】プロジェクトの線形テーブルの応用:テーブルの自然接続


//**データ構造【線形表(二)チェーン表】プロジェクトの線形表の応用:表の自然接続*Copyright(c)2015煙台大学コンピュータと制御工学院*All right reserved.*ファイル名:danlianbiao.cpp*タイトル:データ構造【線形表(二)チェーンテーブル】項目の単一チェーンテーブル:逆置き、接続と増分判断*分類:単一チェーンテーブル:逆置き、接続と増分判断*writer:羅海員*date:2015年10月04日*バージョン:V 1.0.1*オペレーティングシステム:XP*実行環境:VC 6.0*問題説明:表A、m 1行、n 1列、表B、m 2行、n 2列、AとBの自然な接続の結果C(図は以下の通りです)*ヒントを求めます:1.単一チェーンテーブルの記憶構造を定義して、頭挿し法と尾挿し法で単一チェーンテーブルを創立して、そして創立した後の結果を表示します.2.複雑度の要求、アルゴリズムを設計してそして専門の関数でアルゴリズムを実現します;3.理論と実践を結合します
*/
<span style="font-size:14px;">#include <stdio.h>
#include <malloc.h>
#define MaxCol  10          //    
typedef int ElemType;
typedef struct Node1        //        
{
    ElemType data[MaxCol];
    struct Node1 *next;     //        
} DList;
typedef struct Node2        //       
{
    int Row,Col;            //     
    DList *next;            //         
} HList;
void CreateTable(HList *&h)
{
    int i,j;
    DList *r,*s;
    h=(HList *)malloc(sizeof(HList));       //     
    h->next=NULL;
    printf("    ,  :");
    scanf("%d%d",&h->Row,&h->Col);
    for (i=0; i<h->Row; i++)
    {
        printf("   %d :",i+1);
        s=(DList *)malloc(sizeof(DList));   //      
        for (j=0; j<h->Col; j++)                //           
            scanf("%d",&s->data[j]);
        if (h->next==NULL)                  //         
            h->next=s;
        else                                //        
            r->next=s;                      // *s   *r    
        r=s;                                //r            
    }
    r->next=NULL;                           //    next   
}
void DispTable(HList *h)
{
    int j;
    DList *p=h->next;
    while (p!=NULL)
    {
        for (j=0; j<h->Col; j++)
            printf("%4d",p->data[j]);
        printf("
"); p=p->next; } } void LinkTable(HList *h1,HList *h2,HList *&h) { int f1,f2,i; DList *p=h1->next,*q,*s,*r; printf(" : 1 , 2 :"); scanf("%d%d",&f1,&f2); h=(HList *)malloc(sizeof(HList)); h->Row=0; h->Col=h1->Col+h2->Col; h->next=NULL; while (p!=NULL) { q=h2->next; while (q!=NULL) { if (p->data[f1-1]==q->data[f2-1]) // { s=(DList *)malloc(sizeof(DList)); // for (i=0; i<h1->Col; i++) // 1 s->data[i]=p->data[i]; for (i=0; i<h2->Col; i++) s->data[h1->Col+i]=q->data[i]; // 2 if (h->next==NULL) // h->next=s; else // r->next=s; r=s; //r h->Row++; // 1 } q=q->next; // 2 } p=p->next; // 1 } r->next=NULL; // next } int main() { HList *h1,*h2,*h; printf(" 1:
"); CreateTable(h1); // 1 printf(" 2:
"); CreateTable(h2); // 2 LinkTable(h1,h2,h); // printf(" :
"); DispTable(h); // return 0; }</span>