欢迎来到天天文库
浏览记录
ID:56825645
大小:62.50 KB
页数:9页
时间:2020-07-15
《c语言链表操作.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.链表的删除如创建一个学生学号及姓名的单链表,即节点包括学生学号、姓名及指向下一个节点的指针,链表按学生的学号排列。再从键盘输入某一学生姓名,将其从链表中删除。首先定义链表的结构:从链表中删除一个节点有三种情况,即删除链表头节点、删除链表的中间节点、删除链表的尾节点。题目给出的是学生姓名,则应在链表中从头到尾依此查找各节点,并与各节点的学生姓名比较,若相同,则查找成功,否则,找不到节点。由于删除的节点可能在链表的头,会对链表的头指针造成丢失,所以定义删除节点的函数的返回值定义为返回结构体类型的指针。[cpp] viewplain copy1
2、.struct node delet(head,pstr)/以head为头指针,删除pstr所在节点/ 2.struct node head; 3.char pstr; 4.{ 5. struct nodetemp,p; 6. temp = head; / 链表的头指针/ 7. if (head==NULL)/链表为空/ 8. printf("Listis null!"); 9. else /非空表/ 10. { 11. temp =
3、head; 12. while (strcmp(temp->str,pstr)!=0&&temp->next!=NULL)/ 若节点的字符串与输入字符串不同,并且未到链表尾/ 13. { 14. p = temp; 15. temp = tmep->next;/ 跟踪链表的增长,即指针后移/ 16. } 17. if(strcmp(temp->str,pstr)==0) /找到字符串/ 18. { 19.
4、 if(temp==head) { / 表头节点/ 20. printf("delete string :%s",temp->str); 21. head = head->next; 22. free(temp);/释放被删节点/ 23. } 24. else 25. { 26. p->next=temp->next; /表中节点/ 1. printf("delete
5、string :%s",temp->str); 2. free(temp); 3. } 4. } 5. else 6. printf("no find string!");/没找到要删除的字符串/ 7. } 8. return(head); 9.} 2.链表的插入首先定义链表的结构:[cpp] viewplain copy1.struct 2.{ 3.int num; /学生学号 / 4.char str[20]; /姓名 / 5.stru
6、ct node next; 6.} ; 在建立的单链表中,插入节点有三种情况,如图所示;插入的节点可以在表头、表中或表尾。假定我们按照以学号为顺序建立链表,则插入的节点依次与表中节点相比较,找到插入位置。由于插入的节点可能在链表的头,会对链表的头指针造成修改,所以定义插入节点的函数的返回值定义为返回结构体类型的指针。节点的插入函数如下:[cpp] viewplain copy1.struct node insert(head,pstr,n) /插入学号为n、姓名为p s t r 的节点/ 2.struct node head; /链表的
7、头指针/ 3.char pstr; 4.int n; 5.{ 6. struct node p1,p2,p3; 7. p1=(struct node)malloc(sizeof(struct node))/分配一个新节点/ 8. strcpy(p1->str,pstr); /写入节点的姓名字串/ 9. p1->num = n; / 学号/ 10. p2 = head; 11. if(head==NULL) / 空表/ 12. { 13. head=p1; 14
8、. p1->next=NULL;/新节点插入表头/ 15. } 16. else/非空表/ 17. { 18.
此文档下载收益归作者所有