|
源代码网推荐
3、删除 源代码网推荐删除某个结点,其实就是插入某个结点的逆操作。还是对于双向循环链表,要在连续的三个结点s,p,q中删除p结点,只需把s的右链域指针指向q,q的左链域指针指向s,并收回p结点就完成了。 源代码网推荐下面就是一个应用双向循环链表删除算法的例子: 源代码网推荐#include 源代码网推荐#include 源代码网推荐#include 源代码网推荐#define n 10 源代码网整理以下 源代码网推荐typedef struct node 源代码网推荐{ 源代码网推荐char name[20]; 源代码网推荐struct node *llink,*rlink; 源代码网推荐}stud; 源代码网整理以下 源代码网推荐stud * creat(int n) 源代码网推荐{ 源代码网推荐stud *p,*h,*s; 源代码网推荐int i; 源代码网推荐if((h=(stud *)malloc(sizeof(stud)))==null) 源代码网推荐{ 源代码网推荐printf("不能分配内存空间!"); 源代码网推荐exit(0); 源代码网推荐} 源代码网推荐h->name[0]="\0"; 源代码网推荐h->llink=null; 源代码网推荐h->rlink=null; 源代码网推荐p=h; 源代码网推荐for(i=0;i〈n;i++) 源代码网推荐{ 源代码网推荐if((s= (stud *) malloc(sizeof(stud)))==null) 源代码网推荐{ 源代码网推荐printf("不能分配内存空间!"); 源代码网推荐exit(0); 源代码网推荐} 源代码网推荐p-〉rlink=s; 源代码网推荐printf("请输入第%d个人的姓名",i+1); 源代码网推荐scanf("%s",s->name); 源代码网推荐s->llink=p; 源代码网推荐s->rlink=null; 源代码网推荐p=s; 源代码网推荐} 源代码网推荐h->llink=s; 源代码网推荐p->rlink=h; 源代码网推荐return(h); 源代码网推荐} 源代码网整理以下 源代码网推荐stud * search(stud *h,char *x) 源代码网推荐{ 源代码网推荐stud *p; 源代码网推荐char *y; 源代码网推荐p=h->rlink; 源代码网推荐while(p!=h) 源代码网推荐{ 源代码网推荐y=p->name; 源代码网推荐if(strcmp(y,x)==0) 源代码网推荐return(p); 源代码网推荐else p=p->rlink; 源代码网推荐} 源代码网推荐printf("没有查找到该数据!"); 源代码网推荐} 源代码网整理以下 源代码网推荐void print(stud *h) 源代码网推荐{ 源代码网推荐int n; 源代码网推荐stud *p; 源代码网推荐p=h->rlink; 源代码网推荐printf("数据信息为:\n"); 源代码网推荐while(p!=h) 源代码网推荐{ 源代码网推荐printf("%s ",&*(p->name)); 源代码网推荐p=p->rlink; 源代码网推荐} 源代码网推荐printf("\n"); 源代码网推荐} 源代码网整理以下 源代码网推荐void del(stud *p) 源代码网推荐{ 源代码网推荐(p->rlink)->llink=p->llink; 源代码网推荐(p->llink)->rlink=p->rlink; 源代码网推荐free (p); 源代码网推荐} 源代码网整理以下 源代码网推荐main() 源代码网推荐{ 源代码网推荐int number; 源代码网推荐char studname[20]; 源代码网推荐stud *head,*searchpoint; 源代码网推荐number=n; 源代码网推荐clrscr(); 源代码网推荐head=creat(number); 源代码网推荐print(head); 源代码网推荐printf("请输入你要查找的人的姓名:"); 源代码网推荐scanf("%s",studname); 源代码网推荐searchpoint=search(head,studname); 源代码网推荐printf("你所要查找的人的姓名是:%s\n",*&searchpoint->name); 源代码网推荐del(searchpoint); 源代码网推荐print(head); 源代码网推荐} 源代码网推荐 源代码网供稿. |