Chinaunix首页 | 论坛 | 博客
  • 博客访问: 852128
  • 博文数量: 189
  • 博客积分: 4310
  • 博客等级: 上校
  • 技术积分: 1925
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-27 08:56
文章分类

全部博文(189)

文章存档

2015年(1)

2013年(2)

2012年(1)

2011年(39)

2010年(98)

2009年(48)

分类: C/C++

2010-04-09 10:27:46

1)定义链表的。
struct node
{
int num;
struct node *p;
} ;
在链表节点的定义中,除一个整型的成员外,成员p是指向与节点类型完全相同的。
在链表节点的中,非常特殊的一点就是结构体内的域的数据类型使用了未定义成功的数据类型。这是在C中唯一规定可以先使用后定义的。
2)创建一个空表。
struct node *head; / * 定义头* /
head=NULL;/*建一个空表*/
3)利用m a l l o c ( )向系统申请分配一个节点。
p1=p2=(structnode*)malloc(sizeof(structnode));申请/*新节点*/
3)将新节点的成员赋值为空。若是空表,将新节点连接到表头;若是非空表,将新节点接到表尾。
scanf("%d",&p1->num);/*输入节点的值*/
p1->next=NULL;/*将新节点的置为空*/
if(head==NULL)head=p1;/*空表,接入表头*/
elsep2->next=p1;/*非空表,接到表尾*/
链表的逆序
List   *list_reverse(List   *head)  
  {  
  List   *p,*q,*r;  
  p=head;//一开始p指向第一个节点  
  q=p->next;//q指向第二个节点  
  while(q!=NULL)//如果没到链尾  
  {                   //以第一次循环为例  
  r=q->next;//r暂时存储第三个节点  
  q->next=p;//没执行此句前,q->next指向第三个节点  
  //执行之后,q->next指向第一个节点p  
  p=q;//之后p指向第二个节点  
  q=r;//q指向第三个节点  
  //即,...p=>q=>r...变为   ...p<=q<=r...  
  }  
  head->next=NULL;//最后原来的链头变为链尾,把它指向NULL。  
  head=p;//原来的链尾变为链头  
  return   head;  
  }


阅读(797) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~