在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C/ C語言問題 鏈表投票

C語言問題 鏈表投票

【問題描述】用鏈表實(shí)現(xiàn)對候選人的得票進(jìn)行統(tǒng)計(jì)。函數(shù)Statistic的輸入?yún)?shù):head指向鏈?zhǔn)祝琻ame存放候選人的姓名。該函數(shù)的功能為:若在鏈表的結(jié)點(diǎn)上找到name,則將姓名為name的結(jié)點(diǎn)上得得票數(shù)加1;否則新建一個(gè)結(jié)點(diǎn),初始化其姓名和的票數(shù),并將新結(jié)點(diǎn)插入鏈尾。最后返回鏈表的首指針。

【輸入形式】依次輸入候選人姓名,姓名之間以空格為間隔符。輸入0表示結(jié)束輸入。
【輸出形式】姓名:票數(shù)
【樣例輸入】q w e r q e e 0

【樣例輸出】

q:2
w:1
e:3
r:1

我的代碼

include<iostream>

include<string.h>

include<stdlib.h>

struct Node
{

char name[12];
int count;
Node *next;

};
Node Statistic(Node head, char *name)
{

Node *p1 = head;
Node *p2=head;

if (head == 0)
{
    head = new Node;
    strcpy(head->name, name);
    head->count = 1;
    head->next = 0;
}
else
{
    while (p1)
    {
        if (strcmp(p1->name, name) == 0)
        {
            p1->count++;
            break;
        }
        else
        {
            p2 = p1;
            p1 = p1->next;
        }
    }
    if (p1 = NULL)
    {
        p1 = new Node;
        strcpy(p1->name, name);
        p1->count = 1;
        p1->next = 0;
        p2->next = p1;
    }
}
return head;

}
void List(Node *head)
{

while (head)
{
    printf("%s:%d\n", head->name, head->count);
    head = head->next;
}

}
void Free(Node *head)
{

Node *p;
while (head) {
    p = head;
    head = head->next;
    delete p;
}

}
void main()
{

Node *head = 0;
char name[12];
scanf("%s", &name);
while (strcmp(name, "0") != 0)
{
    head = Statistic(head, name);
    scanf("%s", &name);
}
List(head);
Free(head);
system("pause");

}
各位大大 為什么我的代碼只能輸入第一個(gè)人的票數(shù)呢 哪里錯(cuò)了?請幫我看一下 謝謝各位?。。。?/p>

回答
編輯回答
別瞎鬧
#include<iostream>
#include<string.h>
#include<stdlib.h>
struct Node
{

char name[12];
int count;
Node *next;
};
Node *Statistic(Node *head, char *name)  // 這里返回頭指針,參數(shù)也是頭指針
{

Node *p1 = head;
Node *p2=head;

if (head == 0)
{
    head = new Node;
    strcpy(head->name, name);
    head->count = 1;
    head->next = 0;
}
else
{
    while (p1)
    {
        if (strcmp(p1->name, name) == 0)
        {
            p1->count++;
            break;
        }
        else
        {
            p2 = p1;
            p1 = p1->next;
        }
    }
    if (p1 == NULL)    // 這里你少了一個(gè)等號
    {
        p1 = new Node;
        strcpy(p1->name, name);
        p1->count = 1;
        p1->next = 0;
        p2->next = p1;
    }
}
return head;
}
void List(Node *head)
{

while (head)
{
    printf("%s:%d\n", head->name, head->count);
    head = head->next;
}
}
void Free(Node *head)
{

Node *p;
while (head) {
    p = head;
    head = head->next;
    delete p;
}
}
int  main()
{

Node *head = 0;
char name[12];
scanf("%s", name);        // 數(shù)組名本來就是首地址,不需要再加&符號
while (strcmp(name, "0") != 0)
{
    head = Statistic(head, name);
    scanf("%s", name);
}
List(head);
Free(head);
system("pause");
return 0;
}
2018年3月6日 09:38