C语言结构体链表精频姆课件
插入链表节点 插入链表结点操作要保证不破坏链表的连接关系,往往还包含查找的子过程。 空表时,将结点置在head指针下即可 结点插入的位置在链首 结点插入的位置不在链首 删除链表节点 删除链表结点操作要保证不破坏链表的连接关系,往往还包含查找的子过程。 删除链表结点,要考虑下面三种情况: 链表为空时不能执行删除操作 要删除的结点在链首 要删除的节点不在链首 C程序设计快速进阶大学教程 * * 12.2 链表 /*接入链表*/ if(!pStrStuHead) /*接入第一个结点,头指针、尾指针均指向该结点*/ pStrStuHead=pStrStuTail=pStrStuTemp; else { /*接入非第一个结点*/ pStrStuTail->pStrNext=pStrStuTemp;/*接在尾指针所指结点之后*/ pStrStuTail=pStrStuTemp;/*尾指针指向新加入结点*/ } printf("input num and score(>=0, <0 end):\n"); scanf("%d",&iNumTemp); scanf("%f",&fScoreTemp); } return pStrStuHead; } Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. C程序设计快速进阶大学教程 * * 12.2 链表 /*输出链表*/ void list(struct student *pStrStuHead) { while(pStrStuHead) { printf("%d\t%f\t\n",pStrStuHead->iNum,pStrStuHead->fScore);/*输出*/ pStrStuHead=pStrStuHead->pStrNext;/*移动到下一个结点*/ } } 链表的遍历 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. C程序设计快速进阶大学教程 * * 12.2 链表 /*查找结点*/ struct student *search(struct student *pStrStuTemp,float fScoreTemp) { while(pStrStuTemp) { if(pStrStuTemp->fScore==fScoreTemp) break; pStrStuTemp=pStrStuTemp->pStrNext;/*移动到下一个结点*/ } return pStrStuTemp; } 链表的遍历 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Copyright 2004-2011 Aspose Pty Ltd. C程序设计快速进阶大学教程 * * 12.2 链表 例12.5 链表的创建、输出、查找 int main() { struct student strStuTemp; struct student *pStrStuHead,*pStrStuResult; float fScoreTemp; int iNumTemp; pStrStuHead=create(); /*创建链表*/ list(pStrStuHead); /*输出链表所有结点*/ /*输入要查找的成绩,然后返回找到结点的地址,找不到返回空*/ printf("input search score:\n"); scanf("%f",&fScoreTemp); pStrStuResult=search(pStrStuHead,fScoreTemp); if(pStrStuResult) printf("num=%d,score=%f\n",pStrStuResult->iNum, pStrStuResult->fScore); else printf("not found!"); return 0; } Eva