【发布时间】:2013-12-01 22:36:56
【问题描述】:
我正在尝试根据名称(按字母顺序)对结构进行排序。例如我有这样的结构:
struct person{
char name[MAX];
char num[MAX];
char email[MAX];
struct person *next;
struct person *previous;
};
struct person *next, *first, *end;
在我的主要功能中:
int main()
{
struct person p = {{0}}
.
.
.
switch(choice)
{
case 1 :
printf("Name : "); scanf("%s", &p.name);
printf("Num : "); scanf("%s", &p.num);
printf("E-Mail : "); scanf("%s", &p.email);
input(p); //function to input data
break;
case 2 :
sort(p); //function to sort the data
break;
}
}
在我的原型函数中:
void sort(struct person p)
{
struct person *ptr, *ptr2, *temp;
ptr=first;
ptr2=first;
for (ptr= first; ptr!= NULL; ptr= ptr->next)
{
for (ptr2= ptr2->next; ptr2!= NULL; ptr2= ptr2->next)
{
if (strcmp(ptr->name, ptr2->name) > 0)
{
temp = ptr;
ptr= ptr2;
ptr2= temp;
}
}
}
}
好的,所以我有一个原型函数,它根据名称元素对结构进行排序。我尝试使用与 bublesort 相同的原理对其进行排序,但对我来说没有用。指针 ptr 指向列表中的第一个节点,而 ptr2 指向第二个节点。我的算法错了吗?我似乎无法找出问题所在。主要问题是排序。我希望我的问题很清楚。
【问题讨论】:
-
排序后,您可能在列表的开头有一个不同的元素。你怎么知道哪个元素是列表的新开始?我认为您不会知道当前的代码。您的排序功能可能不应该直接使用
struct person p;它可能需要是struct person **p或struct person &*p。
标签: c sorting pointers data-structures doubly-linked-list