2014-12-09 4 views
1

Я пишу запрограммированный запрос о том, что пользователь получает информацию о сотруднике, такую ​​как имя, фамилия и трехзначный номер сотрудника. Структурный и связанный список используются для хранения данных. Отображается перемещение по связанному списку, и отображается информация сотрудника с наивысшим номером идентификатора. Я пытаюсь определить указатель на сотрудника с максимальным идентификатором до сих пор, затем перейдите через список в цикле, и если текущий идентификатор больше предыдущего, замените указатель. У меня есть идея в моей голове и логика на бумаге, но я очень сомневаюсь в том, как сформировать процесс в код.Сортировка самого большого числа в связанном списке

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

typedef struct employee 
{ char fname [21]; 
    char lname [21]; 
    int id; 
    struct employee *next; 
}DATA; 

DATA* insertit (DATA *first, char firstn[], char lastn[], int idnum); 

int main (void) 
{ 
    DATA *head, 
      *p; 
    char firstname[21]; 
    char lastname[21]; 
    int idnumber, 
      j, 
      k, 
      n; 
    char ch, 
     nl; 

    head=NULL; 
    for (j=0; j<21; j++) 
    firstname[j]=' '; 
    printf("Please enter the number of employees to enter information about: "); 
    scanf("%d", &n); 

    for(k=0; k<n; k++) 
    { printf("Please enter the employee's first name: \n"); 
     scanf("%s", firstname); 
     printf("Please enter the employee's last name: \n"); 
     scanf("%s", lastname); 
     printf("Please enter the employee's three digit id number: \n"); 
     scanf("%d", &idnumber); 
     scanf("%c", &nl); 
     head=insertit(head, firstname, lastname, idnumber); 
     for (j=0; j<21; j++) 
     firstname[j]= ' '; 
    } 
    p=head; 
    while (p!=NULL) 
    { printf("\n"); 
    printf("The employee's first name is: %s \n", p->fname); 
    printf("The employee's last name is: %s \n", p->lname); 
    printf("The employee's id number is: %d\n", p->id); 
    p=p->next; 
    } 
printf("Hit any character to continue."); 
scanf("%c", &ch); 
} 

DATA* insertit(DATA *first, char firstn[], char lastn[], int idnum) 
/*Function to insert data into a linked list.*/ 

{ 
    DATA *p, 
     *q, 
    *newp; 
    int found, 
     len, 
      i; 
    found=0; 
    q=first; 
    p=first; 

    while ((p!=NULL) && (!found)) 
    { if ((p->id < idnum) || (p-> id == idnum)) 
    { q=p; 
     p=p->next; 
    } 
    else 
    found=1; 
    } 
newp=(DATA *)malloc(sizeof(DATA)); 
newp->id=idnum; 
strncpy(newp-> fname, firstn, 21); 
strncpy(newp-> lname, lastn, 21); 
newp->next=p; 
if (q!=p) 
    q->next=newp; 
else 
    first=newp; 
return (first); 
} 

Итак, через мою логику, я имею в виду следующее:

время (г = 0; zsmall) { Е ("Сотрудник с наибольшим числом идентификаторов имеет следующий имя: % s \ n ", p-> fname); printf («Сотрудник с наивысшим номером идентификатора имеет следующую фамилию:% s \ n", p-> lname); printf («Сотрудник с наивысшим номером id имеет следующий идентификационный номер:% d \ n», p-> id); } }

Таким образом, благодаря одному пользователю, я следующий код прямо сейчас:

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

typedef struct employee 
{ char fname [21]; 
    char lname [21]; 
    int id; 
    struct employee *next; 
}DATA; 

DATA* insertit (DATA *first, char firstn[], char lastn[], int idnum); 
void printmax(DATA *head); 

int main (void) 
{ 
    DATA *head, 
      *q, 
      *p; 
    char firstname[21]; 
    char lastname[21]; 
    int idnumber, 
      j, 
      k, 
      n; 
    char ch, 
     nl; 

    head=NULL; 
    for (j=0; j<21; j++) 
    firstname[j]=' '; 
    printf("Please enter the number of employees that you would like to enter information about: "); 
    scanf("%d", &n); 

    for(k=0; k<n; k++) 
    { printf("Please enter the employee's first name: \n"); 
     scanf("%s", firstname); 
     printf("Please enter the employee's last name: \n"); 
     scanf("%s", lastname); 
     printf("Please enter the employee's three digit id number: \n"); 
     scanf("%d", &idnumber); 
     scanf("%c", &nl); 
     head=insertit(head, firstname, lastname, idnumber); 
     for (j=0; j<21; j++) 
     firstname[j]= ' '; 
    } 
    p=head; 
    while (p!=NULL) 
    { printf("\n"); 
    printf("The employee's first name is: %s \n", p->fname); 
    printf("The employee's last name is: %s \n", p->lname); 
    printf("The employee's id number is: %d\n", p->id); 
    p=p->next; 
    } 
    printf("Hit any character to continue."); scanf("%c", &ch); 
} 

DATA* insertit(DATA *first, char firstn[], char lastn[], int idnum) 
/*Function to insert data into a linked list.*/ 
{ 
    DATA *p, 
     *q, 
    *newp; 
    int found, 
     len, 
      i; 
    found=0; 
    q=first; 
    p=first; 

    while ((p!=NULL) && (!found)) 
    { if ((p->id < idnum) || (p-> id == idnum)) 
    { q=p; 
     p=p->next; 
    } 
    else 
found=1; 
    } 
newp=(DATA *)malloc(sizeof(DATA)); 
newp->id=idnum; 
strncpy(newp-> fname, firstn, 21); 
strncpy(newp-> lname, lastn, 21); 
newp->next=p; 
if (q!=p) 
    q->next=newp; 
else 
    first=newp; 
return (first); 
} 

void printmax (DATA *head) 
{ 
    DATA *highest = head; 
    DATA *next = head.next; 
    while (next != NULL) 
    { 
     if (next->highid > highest->highid) { 
     highest = next; 
     } 
    next = next->next; 
    } 
    printf("The employee with the highest id number has the first name: %s\n",highest->fname); 
    printf("The employee with the highest id number has the last name: %s\n",highest->lname); 
    printf("The employee with the highest id number has the id number: %d\n", highest->id); 
} 
} 

Я вручную проследили программу, и она, казалось, работали хорошо, но когда я скомпилировать его, следующие ошибки происходят:

  • ошибка: запрос члена «следующий» в чем-то не структуры или объединения DATA * следующая = head.next;
  • ошибка: 'DATA' не имеет ни одного члена с именем 'HighID' если (next-> HighID> высшую> HighID) {
  • ошибка: 'DATA' имеет ни один член с именем 'не HighID' если (next-> highid> high-> highid) {

Я не знаком с этими сообщениями об ошибках, поэтому я исследовал их, пытаясь определить их причину, однако я все еще не уверен. Таким образом, я был бы очень признателен, если бы кто-нибудь объяснил причину и, возможно, решение. Я хотел бы поблагодарить всех вас за вашу помощь.

+2

В чем вопрос? – chux

+0

Напишите некоторый код, реализующий логику, которую вы имеете, а затем вернитесь, покажите нам и спросите о чем-то, с чем вы столкнулись. – ryanpattison

+0

Обзор кода? ... – BLUEPIXY

ответ

0

Чтобы найти самого высокого сотрудника и распечатать его.

void PritMax(const DATA *head) { 
    const DATA *highest = head; 
    const DATA *next = head->next; 
    while (next != NULL) { 
    if (next->id > highest->id) { 
     highest = next; 
    } 
    next = next->next; 
    } 
    printf("The employee with the highest id number has the first name: %s\n", 
     highest->fname); 
    printf("The employee with the highest id number has the last name: %s\n", 
     highest->lname); 
    printf("The employee with the highest id number has the id number: %d\n", 
     highest->id); 
} 
+0

Прежде всего, спасибо вам большое, госпожа или сэр! Когда я проследил это вручную, все получилось хорошо и хорошо, однако компилятор дает мне ошибки, которые я никогда раньше не видел. , но все еще не понимаю. Мои ошибки читаются: запрос для члена «next» в чем-то не структуре или объединении DATA * next = head.next; «DATA» не имеет члена с именем «highid», если (next-> highid> maximum -> highid) 'DATA' не имеет имени с именем 'highid', если (next-> highid> high-> highid) @chux – jvi1021

+0

'const DATA * next = head.next;' -> 'const DATA * next = head -> next; '' if (next-> highid> high-> highid) '->' if (next-> id> maximum-> id) ' – chux

+0

Спасибо вам большое, госпожа или сэр! Я ценю все (: @chux – jvi1021

Смежные вопросы