p-links;s-linkq,这样就完成了插入操作。下例是应用插入算法的一个例子:#include#include#include#define N 10typedef struct nodechar name[20];struct node *link;stud;stud * creatint n /*建立单链表的函数*/stud *p,*h,*s;int i;ifhstud *mallocsizeofstudNULLprintf"不能分配内存空间!";exit0;h-name[0]'\0';h-linkNULL;ph;fori0;iN;I++ifs stud * mallocsizeofstudNULLprintf"不能分配内存空间!";exit0;p-links;printf"请输入第%d个人的姓名:",i+1;scanf"%s",s-name;s-linkNULL;ps;returnh;stud * searchstud *h,char *x /*查找函数*/stud *p;char *y;ph-link;whilep!NULLyp-name;ifstrcmpy,x0returnp;else pp-link;ifpNULLprintf"没有查找到该数据!";void insertstud *p /*插入函数,在指针p后插入*/char stuname[20];stud *s; /*指针s是保存新结点地址的*/ifs stud * mallocsizeofstudNULLprintf"不能分配内存空间!";exit0;printf"请输入你要插入的人的姓名:";scanf"%s",stuname;strcpys-name,stuname; /*把指针stuname所指向的数组元素拷贝给新结点的数据域*/s-linkp-link; /*把新结点的链域指向原来p结点的后继结点*/p-links; /*p结点的链域指向新结点*/mainint number;char fullname[20]; /*保存输入的要查找的人的姓名*/stud *head,*searchpoint;numberN;headcreatnumber; /*建立新链表并返回表头指针*/printf"请输入你要查找的人的姓名:";scanf"%s",fullname;searchpointsearchhead,fullname; /*查找并返回查找到的结点指针*/insertsearchpoint; /*调用插入函数*/3、删除假如我们已经知道了要删除的结点p的位置,那么要删除p结点时只要令p结点的前驱结点的链域由存储p结点的地址该为存储p的后继结点的地址,并回收p结点即可。
以下便是应用删除算法的实例:#include#include#include#define N 10typedef struct nodechar name[20];struct node *link;stud;stud * creatint n /*建立新的链表的函数*/stud *p,*h,*s;int i;ifhstud *mallocsizeofstudNULLprintf"不能分配内存空间!";exit0;h-name[0]'\0';h-linkNULL;ph;fori0;iN;I++ifs stud * mallocsizeofstudNULLprintf"不能分配内存空间!";exit0;p-links;printf"请输入第%d个人的姓名",i+1;scanf"%s",s-name;s-linkNULL;ps;returnh;stud * searchstud *h,char *x /*查找函数*/stud *p;char *y;ph-link;whilep!NULLyp-name;ifstrcmpy,x0returnp;else pp-link;ifpNULLprintf"没有查找到该数据!";stud * search2stud *h,char *x /*另一个查找函数,返回的是上一个查找函数的直接前驱结点的指针,*//*h为表头指针,x为指向要查找的姓名的指针*//*其实此函数的算法与上面的查找算法是一样的,只是多了一个指针s,并且s总是指向指针p所指向的结点的直接前驱,*//*结果返回s即是要查找的结点的前一个结点*/stud *p,*s;char *y;ph-link;sh;whilep!NULLyp-name;ifstrcmpy,x0returns;elsepp-link;ss-link;ifpNULLprintf"没有查找到该数据!";void delstud *x,stud *y /*删除函数,其中y为要删除的结点的指针,x为要删除的结点的前一个结点的指针*/stud *s;sy;x-linky-link;frees;mainint number;char fullname[20];stud *head,*searchpoint,*forepoint;numberN;headcreatnumber;printf"请输入你要删除的人的姓名:";scanf"%s",fullname;searchpointsearchhead,fullname;forepointsearch2head,fullname;delforepoint,searchpoint;四、循环链表循环链表是与单链表一样,是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33457-3.html
看哭了