1

これが私のリンクリストで、コンテンツの文字列表現を保持する文字列バージョンのキーが含まれています。

struct node{
    char key[10];
    char content;
struct node *next;
};
struct node *head=(struct node *) NULL;
struct node *tail=(struct node *) NULL;

struct node * initinode(char *key, char content)
{
    struct node *ptr;
    ptr = (struct node *) calloc( 1, sizeof(struct node ) );
    if( ptr == NULL )                       
        return (struct node *) NULL;        
    else {                                  
        strcpy( ptr->key, key );          
        ptr->content = content;                       
        return ptr;                         
    }
}
void printnode( struct node *ptr )
{
    printf("Key ->%s\n", ptr->key );
    printf("Contents   ->%d\n", ptr->content );
}
void printlist( struct node *ptr )
{
    while( ptr != NULL )        
    {
        printnode( ptr );        
        ptr = ptr->next;         
    }
}
void add( struct node *new )  
{
    if( head == NULL )      
        head = new;         
    tail->next = new;       
    tail->next = NULL;      
    tail= new;              
}

struct node * searchname( struct node *ptr, char *key )
{
    while( strcmp( key, ptr->key ) != 0 ) {    
        ptr = ptr->next;                         
        if( ptr == NULL )                        
            break;                                
    }
    return ptr;                                 
}                     

//-----------------------------add to the list number of files and print list

int file_count = 0;
DIR * dirp;
struct dirent * entry;
dirp = opendir(cwd); 
while ((entry = readdir(dirp)) != NULL)
{
    if (entry->d_type == DT_REG) { /* If the entry is a regular file */
        file_count++;
    }
}
printf("%d \n",file_count);
char file=(char)file_count;
closedir(dirp);

ptr=initinode(files, file);
add(ptr);
printlist( head );
//-----------------------------------casting

その質問に加えて、文字列表現形式でリストにさまざまなデータ型を追加したいと思います。文字列にキャストしてみたいのですが、他の人にはうまくいかないようです。そして、あなたがリストのために無効なデータタイプをダイビングすることを提案するならば、徹底的に説明してください。

ありがとうございました

4

1 に答える 1

1

あなたのコードでは、ここにコメントがあります

void add( struct node *new )  
{
    if( head == NULL )      
        head = new;         
    tail->next = new;        // Making tail point to next node
    tail->next = NULL;      // but, immediately setting tail to NULL --> problem
    tail= new;              // tail pointing to new but connection to previous node lost
}

機能は

void add( struct node *new )  
{
    if( head == NULL ) {      
        head = new;
        tail = new; // Grow at tail and keep head static
    }
    else {         
        tail->next = new;        // Connect current node to next
        tail= new;              // Move tail to new node
        tail->next = NULL;      // Since this is the last node, set next to NULL
    }
}

考慮すべき別のポイントがあります。この呼び出しでは、関数内で更新されるポインターをprintlist( head );渡します。常にリストの最初の要素を指すように、コピーを作成して関数に渡すのはhead良い考えかもしれません。headhead

PS:変数newはキーワードであるため、名前を付けないでください。C++

于 2013-02-26T00:13:27.780 に答える