Я пишу запрограммированный запрос о том, что пользователь получает информацию о сотруднике, такую как имя, фамилия и трехзначный номер сотрудника. Структурный и связанный список используются для хранения данных. Отображается перемещение по связанному списку, и отображается информация сотрудника с наивысшим номером идентификатора. Я пытаюсь определить указатель на сотрудника с максимальным идентификатором до сих пор, затем перейдите через список в цикле, и если текущий идентификатор больше предыдущего, замените указатель. У меня есть идея в моей голове и логика на бумаге, но я очень сомневаюсь в том, как сформировать процесс в код.Сортировка самого большого числа в связанном списке
#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) {
Я не знаком с этими сообщениями об ошибках, поэтому я исследовал их, пытаясь определить их причину, однако я все еще не уверен. Таким образом, я был бы очень признателен, если бы кто-нибудь объяснил причину и, возможно, решение. Я хотел бы поблагодарить всех вас за вашу помощь.
В чем вопрос? – chux
Напишите некоторый код, реализующий логику, которую вы имеете, а затем вернитесь, покажите нам и спросите о чем-то, с чем вы столкнулись. – ryanpattison
Обзор кода? ... – BLUEPIXY