北方站长站
客服热线:0632-5117766

链表的C语言实现之循环链表及双向链表

[2007-10-17 00:00:00] 作者:Northz.com 来源:北方站长站

Tags:双向 循环 实现 语言 stud rlink printf 结点 p- name

  

4gE北方站长站
  1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。 4gE北方站长站
  2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。 4gE北方站长站
  二、双向链表 4gE北方站长站
  双向链表其实是单链表的改进。4gE北方站长站
  当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链域,那么能不能定义一个既有存储直接后继结点地址的链域,又有存储直接前驱结点地址的链域的这样一个双链域结点结构呢?这就是双向链表。4gE北方站长站
  在双向链表中,结点除含有数据域外,还有两个链域,一个存储直接后继结点地址,一般称之为右链域;一个存储直接前驱结点地址,一般称之为左链域。在c语言中双向链表结点类型可以定义为: 4gE北方站长站
typedef struct node4gE北方站长站
{4gE北方站长站
int data; /*数据域*/4gE北方站长站
struct node *llink,*rlink; /*链域,*llink是左链域指针,*rlink是右链域指针*/4gE北方站长站
}JD;
4gE北方站长站
  当然,也可以把一个双向链表构建成一个双向循环链表。4gE北方站长站
  双向链表与单向链表一样,也有三种基本运算:查找、插入和删除。4gE北方站长站
  双向链表的基本运算:4gE北方站长站
  1、查找4gE北方站长站
  假若我们要在一个带表头的双向循环链表中查找数据域为一特定值的某个结点时,我们同样从表头结点往后依次比较各结点数据域的值,若正是该特定值,则返回指向结点的指针,否则继续往后查,直到表尾。4gE北方站长站
  下例就是应用双向循环链表查找算法的一个程序4gE北方站长站
#include <stdio.h>4gE北方站长站
#include <malloc.h>4gE北方站长站
#define N 104gE北方站长站
typedef struct node4gE北方站长站
{4gE北方站长站
 char name[20];4gE北方站长站
 struct node *llink,*rlink;4gE北方站长站
}stud;4gE北方站长站
stud * creat(int n)4gE北方站长站
{4gE北方站长站
 stud *p,*h,*s;4gE北方站长站
 int i;4gE北方站长站
 if((h=(stud *)malloc(sizeof(stud)))==NULL)4gE北方站长站
 {4gE北方站长站
  printf("不能分配内存空间!");4gE北方站长站
  exit(0);4gE北方站长站
 }4gE北方站长站
 h->name[0]=’/0’;4gE北方站长站
 h->llink=NULL;4gE北方站长站
 h->rlink=NULL;4gE北方站长站
 p=h;4gE北方站长站
 for(i=0;i<n;i++)4gE北方站长站
 {4gE北方站长站
  if((s= (stud *) malloc(sizeof(stud)))==NULL)4gE北方站长站
  {4gE北方站长站
   printf("不能分配内存空间!");4gE北方站长站
   exit(0);4gE北方站长站
  }4gE北方站长站
  p->rlink=s;4gE北方站长站
  printf("请输入第%d个人的姓名",i+1);4gE北方站长站
  scanf("%s",s->name);4gE北方站长站
  s->llink=p;4gE北方站长站
  s->rlink=NULL;4gE北方站长站
  p=s;4gE北方站长站
 }4gE北方站长站
 h->llink=s;4gE北方站长站
 p->rlink=h;4gE北方站长站
 return(h);4gE北方站长站
}4gE北方站长站
stud * search(stud *h,char *x)4gE北方站长站
{4gE北方站长站
 stud *p;4gE北方站长站
 char *y;4gE北方站长站
 p=h->rlink;4gE北方站长站
 while(p!=h)4gE北方站长站
 {4gE北方站长站
  y=p->name;4gE北方站长站
  if(strcmp(y,x)==0)4gE北方站长站
   return(p);4gE北方站长站
  else p=p->rlink;4gE北方站长站
 }4gE北方站长站
 printf("没有查找到该数据!");4gE北方站长站
}4gE北方站长站
void print(stud *h)4gE北方站长站
{4gE北方站长站
 int n;4gE北方站长站
 stud *p;4gE北方站长站
 p=h->rlink;4gE北方站长站
 printf("数据信息为:/n");4gE北方站长站
 while(p!=h)4gE北方站长站
 {4gE北方站长站
  printf("%s ",&*(p->name));4gE北方站长站
  p=p->rlink;4gE北方站长站
 }4gE北方站长站
 printf("/n");4gE北方站长站
}4gE北方站长站
main()4gE北方站长站
{4gE北方站长站
 int number;4gE北方站长站
 char studname[20];4gE北方站长站
 stud *head,*searchpoint;4gE北方站长站
 number=N;4gE北方站长站
 clrscr();4gE北方站长站
 head=creat(number);4gE北方站长站
 print(head);4gE北方站长站
 printf("请输入你要查找的人的姓名:");4gE北方站长站
 scanf("%s",studname);4gE北方站长站
 searchpoint=search(head,studname);4gE北方站长站
 printf("你所要查找的人的姓名是:%s",*&searchpoint->name);4gE北方站长站
}
4gE北方站长站

 

News

 

info

 

down

出售手机裁听器,手机跟踪定位系统    企业网站,网城,购物网,都市导购,校园网    网上书店系统    上海电信机房服务器托管,双线主机托管    美女图片馆    15G 高清晰图片资源 无水印    室内装潢材料新产品杰威尔艺术漆    收一万ip的美女图片    大量收购个人网址导航网站    出售网址站PR=4alexa=119,764    

1 2 3 下一页

下一篇链接:轻轻松松学习C++ 标准模板库STL

上一篇链接:使用Eclipse3.01 + MinGW3.1配置标准C/C++开发环境详解

评论】 【打印】 【加入收藏】 【关闭→论坛 →博客 →数据中心

 共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面