2011-08-20 118 views
0

我爲c中的List構建了這個接口,我向列表中插入指向數組結構的指針, 現在我想要打印struct的所有字段,我該怎麼做?打印C中所有列表元素

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 

typedef struct element { 
    void *item; 
    struct element *next; 
} Element; 

typedef Element* position; 
typedef Element* List; 

typedef struct strc 
{ 
    int row,col,value; 
} Strc; 

List initList() 
{ 
    Element *ls=malloc(sizeof(Element)); 
    if(ls) 
     ls->next=NULL; 
    else 
     ls=NULL; 
    return ls; 
} 

position insertToList(position p, void *item) 
{ 
    position newp=malloc(sizeof(Element)); 
    if(newp) 
    { 
     newp->next=p->next; 
     p->next=newp; 
     newp->item=item; 
     //p=p->next; 
    } 
    else newp=NULL; 
    return newp; 
} 

void *retriveFromList(position p) { return p->item; } 

position Next(position p) { return (position)p->next; } 

int isEmpty(List ls) { return ls->next==NULL; } 

void freeList(List ls) 
{ 
    position pos=ls->next; 
    while(ls->next!=NULL) 
    { 
     pos=ls->next; 
     ls->next=pos->next; 
     free(pos); 
    } 
} 
void puts(List *ls) 
{ 
    Position p=*ls; 
    Strc *tmp; 
    int i; 
    for(i=0;i<10;i++) 
    { 
     tmp=(Strc *)malloc(sizeof(strc)); 
     tmp->row=i; 
     tmp->col=i+1; 
     tmp->value=i+2; 
     p=insertToList(p,tmp); 
    } 
} 
void print_list(List ls) 
{ 
    position p=ls->next; 
    while(p!=NULL) 
    { 
     printf("%3d\n",*((int*) retriveFromList(p))); 
     p=Next(p);   
    } 
} 

void main() 
{ 
    List ls=initList(); 
    puts(&ls); 
    print(ls); 
} 
+3

誰寫的這段代碼? (是的,我暗示你沒有寫出它) – cnicutar

+2

那麼幾十年前呢? –

+0

@cnicutar,這個代碼對你來說有什麼意義? (真正好奇,不懷疑或試圖挑戰)。 – KyleWpppd

回答

1

所以,我的C不是盛大

但是,好像有一噸是將要吃掉你,你得到這個運行的小錯別字。其中puts()已在stdio.h中定義的最大的一個。

首先,這個東西不能編譯給我,所以通過所有的編譯器錯誤工作讓我感到非常。您的puts函數也缺少右括號。我將它重命名爲putv()並將其更改爲以下內容。

void putv(List *ls) 
{ 
    position p=*ls; 
    Strc *tmp; 
    int i; 
    for(i=0;i<10;i++) 
    { 
     if(tmp=(Strc *)malloc(sizeof(Strc))) 
     { 
      tmp->row=i; 
      tmp->col=i+1; 
      tmp->value=i+2; 
      p=insertToList(p,tmp); 
     } 
    } 
} 

的第二個問題是,你的主要功能不是調用print_list(),而是調用平原print()

void main() 
{ 
    List ls=initList(); 
    putv(&ls); 
    print_list(ls); 
} 

這並不能解決所有的問題,您

主要是因爲我不認爲這是打印你想要什麼做的,但我會留下一點點,你要弄清楚。

+0

爲什麼'(List * ls)'? List已經是一個指針了,而你並沒有寫入'ls',所以我會這樣做:'void putv(List ls){'等等 –

+0

這是真的。因此,爲了驗證,大部分是這樣我知道我完全理解了...... 正確的解決方案也意味着在主要中,我們用'putv(ls)'而不是現在有什麼叫'putv(&ls)'?現有的方法將指針ls的地址傳遞給putv。相反,我們可以只傳遞ls,它是一個指向List的指針,並直接對該列表元素進行操作。這意味着我們還必須將putv更改爲'position p = ls;',並使用insertToList將(&p,tmp)'作爲我們傳遞的值。 – KyleWpppd