网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.水滴石穿C语言之代码检查工具.
.C++ SDK+Symbian开发入门之运行.
.BCB控件制作和消息处理.
.[收藏]ASP.Net生成静态HTML页 .
.编程实现自动弹出和关闭CD托盘.
.用C++访问SQL Server 2000.
.求n!的程序(n=1&&n=1000).
.C++箴言:声明为非成员函数时机.
.高质量C++/C编程指南(九).
.Delphi中带缓存的数据更新技术.
.谁动了我的指针.
.用C实现exp函数.
.C++ STL编程轻松入门.
.Install Shield的使用介绍.
.C语言程序开发经典实例之三.
.C++语言的VxD与外界通信的所有接.
.“Hello world!”的N种写法.
.开发Web应用程序中Cookie使用的问.
.C语言初学者入门讲座 第八讲 转移.
.数据结构学习C++——图(1&2&3&4.

链表的C语言实现之删除结点

发表日期:2008-3-8



  假如我们已经知道了要删除的结点p的位置,那么要删除p结点时只要令p结点的前驱结点的链域由存储p结点的地址该为存储p的后继结点的地址,并回收p结点即可。

  以下便是应用删除算法的实例:

  

  #include <stdio.h>

  #include <malloc.h>

  #include <string.h>

  #define N 10

  typedef strUCt node

  {

   char name[20];

   struct node *link;

  }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->link=NULL;

   p=h;

   for(i=0;i<n;i++)

   {

    if((s= (stud *) malloc(sizeof(stud)))==NULL)

    {

     printf("不能分配内存空间!");

     exit(0);

    }

    p->link=s;

    printf("请输入第%d个人的姓名",i+1);

    scanf("%s",s->name);

    s->link=NULL;

    p=s;

   }

   return(h);

  }

  

  stud * search(stud *h,char *x) /*查找函数*/

  {

   stud *p;

   char *y;

   p=h->link;

   while(p!=NULL)

   {

    y=p->name;

    if(strcmp(y,x)==0)

     return(p);

    else p=p->link;

   }

   if(p==NULL)

   printf("没有查找到该数据!");

  }

  

  stud * search2(stud *h,char *x) /*另一个查找函数,返回的是上一个查找函数的直接前驱结点的指针,*/

   更多文章 更多内容请看C/C++进阶技术文档专题,或
  /*h为表头指针,x为指向要查找的姓名的指针*/

  /*其实此函数的算法与上面的查找算法是一样的,只是多了一个指针s,并且s总是指向指针p所指向的结点的直接前驱,*/

  /*结果返回s即是要查找的结点的前一个结点*/

  {

   stud *p,*s;

   char *y;

   p=h->link;

   s=h;

   while(p!=NULL)

   {

    y=p->name;

    if(strcmp(y,x)==0)

     return(s);


    else

    {

     p=p->link;

     s=s->link;

    }

   }

   if(p==NULL)

    printf("没有查找到该数据!");

  }

  

  void del(stud *x,stud *y) /*删除函数,其中y为要删除的结点的指针,x为要删除的结点的前一个结点的指针*/

  {

   stud *s;

   s=y;

   x->link=y->link;

   free(s);

  }

  

  main()

  {

   int number;

   char fullname[20];

   stud *head,*searchpoint,*forepoint;

   number=N;

   head=creat(number);

   printf("请输入你要删除的人的姓名:");

   scanf("%s",fullname);

   searchpoint=search(head,fullname);

   forepoint=search2(head,fullname);

   del(forepoint,searchpoint);

  } 更多文章 更多内容请看C/C++进阶技术文档专题,或
上一篇:C++ SDK+Symbian开发入门之应用程序 人气:789
下一篇:C++箴言:避免析构函数调用虚函数 人气:717
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐