gpt4 book ai didi

c - 尝试交换节点数据

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:39 25 4
gpt4 key购买 nike

我正在尝试按名称排列链表数据,因此我将每个节点名称与下一个节点名称进行比较。并且是的,想要交换节点数据,以具有按名称排列的链表。

我尝试将节点的每个数据与另一个交换,以防函数“trier”中的测试为真,测试为 (strcmp(prec, ptr) < 0) .它似乎运作良好,直到最后一个。 enter image description here

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

struct patient {
int cin;
char nom[8];
char prenom[8];
int annee;
struct patient *suivant;
};

struct patient *tete = NULL;

void creationdePatient() {
struct patient* ptr;
char rep;

ptr = malloc(sizeof(struct patient));
tete = ptr;
printf("Saisir Numero de Cin de Nouveau Patient: ");
scanf("%d", &tete->cin);
printf("Saisir Nom de Patient: ");
scanf("%8s", &tete->nom);
printf("Saisir prenom de Patient: ");
scanf("%8s", &tete->prenom);
printf("Saisir annee de naissance de Patient: ");
scanf("%d", &tete->annee);
tete->suivant = NULL;
printf("\nVoulez vous Saisir un autre Patient ?: (O,N): \n");
scanf(" %c", &rep);

while (toupper(rep) == 'O') {
ptr = malloc(sizeof(struct patient));
printf("Saisir Numero de Cin de Nouveau Patient: ");
scanf("%d", &ptr->cin);
printf("Saisir Nom de Patient: ");
scanf("%8s", &ptr->nom);
printf("Saisir prenom de Patient: ");
scanf("%8s", &ptr->prenom);
printf("Saisir annee de naissance de Patient: ");
scanf("%d", &ptr->annee);
ptr->suivant = tete;
tete = ptr;
printf("\nVoulez vous Saisir un autre Patient ?: (O,N): \n");
scanf(" %c", &rep);
}
}

void echangedeNom(struct patient *x, struct patient *y) {
char temp[8];
strcpy(temp, y->nom);
strcpy(y->nom, x->nom);
strcpy(x->nom, temp);
}

void echangedePrenom(struct patient *x, struct patient *y) {
char temp[8];
strcpy(temp, y->prenom);
strcpy(y->prenom, x->prenom);
strcpy(x->prenom, temp);
}

void echangedesentiers(struct patient *x, struct patient *y) {
int temp = 0;
temp = y->cin;
y->cin = x->cin;
x->cin = temp;
}

void echangedesannes(struct patient *x, struct patient *y) {
int temp = 0;
temp = y->annee;
y->annee = x->annee;
x->annee = temp;
}

void printtList() {
struct patient *temp = tete;

while (temp != NULL) {
printf("Cin: %d | Nom:%s | Prenom: %s |Anne de naissance: %d\n",
temp->cin, temp->nom, temp->prenom, temp->annee);
temp = temp->suivant;
}
}

void trier() {
struct patient *ptr = tete;
struct patient *prec = NULL;
int echange;
do {
echange = 0;

while (ptr != NULL && ptr->suivant != NULL) {
prec = ptr;
ptr = ptr->suivant;
if (strcmp(prec->nom, ptr->nom) < 0) {
echangedeNom(prec, ptr);
echangedePrenom(prec, ptr);
echangedesentiers(prec, ptr);
echangedesannes(prec, ptr);
echange = 1;
}
}
} while (echange == 1);
}

int main() {
creationdePatient();
printtList();
trier();
printf("=======================\n");
printtList();
}

一些数据在交换时会得到错误的信息,比如 cin交换后的数字不再相同。

最佳答案

你在这里交换了两次整数:

while(ptr!=NULL && ptr->suivant!=NULL){
// [...]
echangedesentiers(prec,ptr);
echangedesentiers(prec,ptr);
// [...]
}

顺便说一下,这是学习调试代码的第一步: How to debug small programs .

关于c - 尝试交换节点数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com