Sort调试通过的
#include <stdio.h> #include <stdlib.h> #include "test.h"///////////////////////////////////////////////////////////////////////////////////////*目前测试,结点的结构体只放了个number*////////////////////////////////////////////////////////////////////////////////////////*插入排序主例程*/ nodetype OrderList(nodetype pHead) { nodetype guard,pChoosedNode,pPreChoosedNode; /*pChoosedNode用来指向需要插入的结点,pPreChoosedNode用来指向pChoosedNode的前一个结点*/ //for(pPreChoosedNode=pHead,pChoosedNode=pHead->pNext;pChoosedNode!=NULL;) pPreChoosedNode=pHead,pChoosedNode=pHead->pNext;while(NULL!=pChoosedNode) { guard=pHead; /*guard用来遍历寻找合适的插入位置*/ //for(;guard!=pChoosedNode;guard=guard->pNext) while(guard!=pChoosedNode) { if(guard->pNext->number > pChoosedNode->number)/*如果找到,即把pChoosedNode所指向的结点插到guard后面,然后跳出循环*/ { pPreChoosedNode->pNext=pChoosedNode->pNext; pChoosedNode->pNext=guard->pNext; guard->pNext=pChoosedNode; pChoosedNode=pPreChoosedNode->pNext; break; /*别忘了此处的break*/ } guard=guard->pNext; } if(guard==pChoosedNode)/*此处需要注意,只在pChoosedNode所指结点不需要前插时,移动pChoosedNode和pPreChoosedNode*/ { pChoosedNode=pChoosedNode->pNext; pPreChoosedNode=pPreChoosedNode->pNext; } } return pHead;} // OK 创建单链表nodetype CreateList(){//声明指针变量pHead,用于保存头结点指针nodetype pHead; //分配头结点内存,并将返回指针赋给pHeadpHead = malloc(sizeof *pHead); //将pHead->data.id置为-1//将pHead的next置为NULLpHead->pNext = NULL;return pHead;}// OK 输出整个单链表的内容,pHead为头结点指针 void Printlist(nodetype pHead){//声明一个指针变量Node,用于保存链表的当前结点nodetype pNode;//将pNode赋值为输入参数pHead->pNextpNode = pHead->pNext;//循环读取pNode->data字段的值,知道pNode为空指针while(pNode){printf("The number is %d\n",pNode->number);//将pNode赋值为pNode->pNextpNode = pNode->pNext;}}// OK 计算单链表的长度,pHead为头结点指针int GetListLen(nodetype pHead){//声明一个整形变量i,用于保存链表长度int i = 0;//声明一个指针变量pNode,用于保存链表的当前结点nodetype pNode = NULL;//将pNode赋值为输入参数pHeadpNode = pHead;//循环读取pNode,直到pNode为空指针while(pNode){i = i + 1;pNode = pNode->pNext;}return i;}// OK 查找学生ID为stuID的结点,pHead为头结点指针,stuID为学生IDnodetype FindNodeByStuID(nodetype pHead,int stuID){//声明一个指针变量pNode,用于保存链表的当前结点nodetype pNode = pHead;//循环读取pNode->data中,iID字段的值,直到pNode为空指针while(pNode){//如果pNode->data.ID等于 iif(pNode->number==stuID){//则推出循环;break;}//将pNode赋值为pNode->pNext;pNode = pNode->pNext;}//返回pNodereturn pNode;}//在制定的学生ID结点后插入一个结点,pHead为头结点指针,iStuID为学生ID,pStudentInfo为结点值指针// OK nodetype InsertNode(nodetype pHead,int iStudID,StudentInfo * pStudentInfo)nodetype InsertNode(nodetype pHead,int iStudID){//声明两个指针变量pNode,pNewNode,分别用于保存当前结点和新分配的结点指针nodetype pNode = NULL;nodetype pNewNode = malloc(sizeof *pNewNode);pNewNode->pNext = malloc(sizeof *(pNewNode->pNext));//找到值为iStudID的结点指针,并保存到pNodepNode = FindNodeByStuID(pHead,iStudID);//将pNode->pNext赋值为pNewNode,感觉有问题//pNewNode = pNode->pNext;pNewNode->pNext = pNode->pNext;pNode->pNext = pNewNode;pNewNode->number = 2010;//将pNewNode->pNext赋值为空,感觉有问题//pNewNode->pNext = NULL;//将pStudentInfo赋值给pNewNode的data域//返回pHeadreturn pHead;}//在量表尾部插入一个结点,pHead为头结点指针,pStudentInfo为节点值指针/*单链表插入排序的测试例程*/ int main(void) { /*构造一个包含头节点的单链表*/ nodetype head = malloc(sizeof *head); nodetype p = head; nodetype test = NULL; int i=0; //int result = 0; while(i<6) { p->pNext = malloc(sizeof *head); p = p->pNext; p->number = rand()%100; printf("%d",p->number); p->pNext = NULL; i++; } printf("\n"); //Printlist(head);//CreateList();//result = GetListLen(head);//printf("result ========= %d\n",result);//test = FindNodeByStuID(head,34);test = InsertNode(head,34); /*插入排序*/ // OrderList(head); /*输出排序后的链表*/ p=head->pNext; while(p!=NULL) { printf("%d ",p->number); p=p->pNext; } /*释放内存*/ while(head) { p=head; head=head->pNext; free(p); } return 0; }