c程序显示链表的功能

时间:2014-05-28 19:48:55

标签: c

我是C编程的新手,我正在尝试为链表编写显示方法。我的问题是角色应该优先考虑。我的意思是它应该是这样的:P1 P2 P3 S5 S9 S20 A2 A6 A4。我的代码有效,但我不知道如何订购这样的字符。这是我的代码:

    struct node {
    int pages;
    char userType;
    struct node *next;
};

struct node *first= NULL;
struct node *temp=NULL;

void enqueue(char ch, int pr){
    struct node *np, *temp, *prev;
    int found;

    np= (struct node *)malloc(sizeof(struct node));
    np->userType= ch;
    np->pages= pr;
    np->next= NULL;
    if(first == NULL){
        first=np;
        return;
    }

    temp= first;
    found=0;

    while((temp != NULL) && (!found)){
        if(temp->pages < pr){
            prev= temp;
            temp= temp->next;
        }else{
            found=1;
        }
    }

    if(prev == NULL){
        np->next= first;
        first= np;
    }else{
        prev->next=np;
        np->next=temp;
    }

}

void display(){
    struct node *np;
    np= first;
    while (np != NULL){
        printf("%d", np->pages);
        np= np->next;
    }
}


main(){
    srand(time(NULL));
    int p,d,i;
    char c;
    for(i=0; i<50; i++){
        p=1+(rand()%20);
        d=rand()%3;
        switch(d){
            case 0: c= 'P'; break;
            case 1: c= 'A'; break;
            case 2: c= 's'; break;
        }

        enqueue(c,p);
    }

    display();
}

你能提供任何解决方案吗? Thanx提前

1 个答案:

答案 0 :(得分:1)

问题是在enqueue()函数中插入节点时:

变化:

   struct node *np, *temp, *prev;

要:

   struct node *np, *temp, *prev=NULL;

剧透代码 here