void sort(struct people *head)
{
struct people *p1,*p2,*p3;
p3=NULL;
for( p1=head, p2=p1->next;p2!=NULL;p1=p1->next,p2=p2->next)
if(strcmp((p1->name),(p1->next->name))>0)
{
p3=p1;
p1=p2;
p2=p3;
printf("%s",p1->name);
printf("%s",p2->name);
}
p2->next=NULL;
}
uj5u.com熱心網友回復:
#include <stdio.h>#include <string>
#include <ctime>
typedef struct People {
char name[20];
char id[20];
struct People * next;
} People;
People * create(int n) {
if ( n<1 ) return NULL;
int i; int v;
v = rand() % 1000;
People * pHead = (People*) malloc( sizeof(People));
sprintf(pHead->name, "name-%03d", v);
sprintf(pHead->id, "id-%03d", v);
People * p = pHead;
for ( i=1; i<n; i++) {
p->next = (People*) malloc( sizeof(People));
v = rand() % 1000;
sprintf(p->next->name, "name-%d", v);
sprintf(p->next->id, "id-%03d", v);
p = p->next;
}
p->next = NULL;
return pHead;
};
void printList(People * pHead) {
printf("\n--------- People List ---------\n");
if ( pHead == NULL) return;
People * p = pHead;
while ( p ) {
printf("%s : %s\n", p->name, p->id);
p = p->next;
}
}
People * sortList(People * pHead) {
if ( NULL == pHead || pHead->next == NULL ) return pHead;
People * pTH = (People*) malloc( sizeof(People));
pTH->next = pHead;
People * pTail = NULL;
while ( pTH->next->next != pTail ) {
People * pPrior = pTH;
People * pCur = pTH->next;
People * pNext = pCur->next;
do {
if ( strcmp ( pCur->name, pNext->name)>0) {
pCur->next = pNext->next;
pNext->next = pCur;
pPrior->next = pNext;
People * pT = pNext;
pNext = pCur;
pCur = pT;
}
pNext = pNext->next;
pCur = pCur->next;
pPrior = pPrior->next;
} while( pNext!=pTail);
pTail = pCur;
}
pHead =pTH->next;
free(pTH);
return pHead;
};
int main()
{
srand(time(NULL));
People * p = create(10);
printList(p);
p = sortList(p);
printList(p);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/124514.html
標籤:C語言
上一篇:RTMP/RTSP/GB28181協議視頻平臺授權頁面開發中數字框輸入字母BUG解決方法
下一篇:C語言姓名排序后無法輸出,求解
