Chinaunix首页 | 论坛 | 博客
  • 博客访问: 327329
  • 博文数量: 96
  • 博客积分: 2041
  • 博客等级: 大尉
  • 技术积分: 1080
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-20 14:08
文章分类

全部博文(96)

文章存档

2015年(2)

2013年(1)

2012年(93)

分类: Delphi

2012-03-10 21:11:20

#include
#include
typedef  int datatype;
//链表结构
typedef struct lnode
{
 datatype data ;
 struct lnode * next ;
}LNode , * LinkList ;

//头插法创建链表  ===不含头结点====
LinkList  Creat_LinkList_TopMethod()
{
 
 LinkList L ;
 LNode * s ;
 datatype x ;
 

// L->next = NULL ;  此句错误,因为还未知L, L->next就更不可能知道  记为1处错误
// L->data = 0 ;

 L = NULL ;
 scanf("%d",&x) ;
 
 while(x != 0)
 {
  s = (LNode *)malloc(sizeof(LNode)) ;
  s->data = x ;
    // s->next = L->next ;  此处与1处错误同时做错
  //  L->next = s ;  此处与1处错误同时做错
  
  s->next = L ;
  L= s ;
  scanf("%d",&x) ;
  
 }
 
 return L ;
 
}

 

//尾插法创建链表 ===不含头结点====
LinkList Creat_LinkList_TailMethod()
{
 LinkList L = NULL ;
 LNode * r , * s ;
 datatype x ;

 r = NULL ;
 scanf("%d",&x) ;
 while(x != 0)
 {
  s = (LNode *)malloc(sizeof(LNode)) ;
  s->data = x ;
  if(L == NULL) L = s ;   // ****注意第一个节点的处理****
  else r->next = s ;
  r = s ;     // ****注意第一个节点的处理****
 
  scanf("%d",&x) ;
 
 }
 if(r !=  NULL) r->next = NULL ; //最后结点的处理。开始忘了写
 
 return L ;
}


//求不带头结点的单链表的表长
int getLength_LinkList(LinkList  L)
{
 LNode * p ;
 int i = 0 ;
 p = L ;
 while(p)
 {
  i++ ;
  p = p->next ;

 }
 return i ;
}


LNode * findByValue(LinkList L , datatype x)
{
 LNode * p ;
 p = L ;  //此为在不含头结点单链表中查找,若含头结点则只需将此句改为p = L->next ;
 while(p && p->data != x)
 {
  p = p->next ;
 }
  return p ;    //相当于这两句 if(p) return p ; else return NULL ;
}

LNode * findByNum(LinkList L , int i )
{
 LNode * p ;
 p = L ;
 int j ;
 for(j=0; j {
  p = p->next ;
 }
 return p ;
}

void Insert_LinkList(LinkList L ,int i , datatype x)
{
 LNode * p,* s ;
 p = findByNum(L,i-1) ;
 s = (LNode *)malloc(sizeof(LNode)) ;
 s->data = x ;  //开始忘了写
 s->next = p->next ;
    p->next = s ;

}

void Delete_LinkList(LinkList L , int i)
{
 LNode * p,*q ;
 p = findByNum(L,i-1) ;
 q = p->next ;
 p->next = q->next ;
 free(q) ;

}

//逆置
void reverse(LinkList &L)
{
 LNode * p  , *q ;
 p = L ;
 L = NULL ;//开始忘了写
 while(p)
 {
  q = p ;
  p = p->next ;
 
 
  q->next = L ;
 
  L = q ;
 
 }


}

int main()
{

 LinkList L , LA , LB , LC ;
 LNode * p , * q , *s ;
 int i , j;
 /*
 
 printf("头插法\n") ;
 L = Creat_LinkList_TopMethod() ;


 
 p = L ;

 printf("头插结果:\n") ;
 while(p)
 {
  
  printf("%d\n",p->data) ;
  p = p->next ;
  
 }
 i = getLength_LinkList(L) ;
 printf("表长") ;
 printf("%d\n",i) ;
 
 

  */
 printf("尾插法\n") ;
 L = Creat_LinkList_TailMethod() ;

 
  /*
  p = L ;
 printf("尾插结果:\n") ;

 while(p)
 {
  printf("%d\n",p->data) ;
  p = p->next ;
 }

 i = getLength_LinkList(L) ;
 printf("表长") ;
 printf("%d\n",i) ;
   
 
 p = findByValue(L,3) ;
 printf("查找数据为3的结点:") ;
 if(p)printf("%d",p->data) ;
 else printf("找不到\n") ;

 
 p = findByNum(L,3) ;
 printf("查找第三个结点的数据:\n") ;
 if(p)printf("%d",p->data) ;
 else printf("找不到\n") ;

 Insert_LinkList(L,2,99) ;
 printf("在第二个位置插入数据为99后结果:\n") ;
 
 p = L ;
 while(p)
 {
  printf("%d\n",p->data) ;
  p = p->next ;
 }
 
 Delete_LinkList(L , 2) ;
 printf("删除第二个元素之后") ;
 p = L ;
 while(p)
 {
  printf("%d\n",p->data) ;
  p = p->next ;
 }

*/ 

 /*合并
 LA = Creat_LinkList_TailMethod() ;
 LB = Creat_LinkList_TailMethod() ;
 */
 reverse(L) ;
 p = L ;


 while(p)
 {
  printf("%d\n",p->data) ;
  p = p->next ;
 }

}


 

阅读(1042) | 评论(0) | 转发(0) |
0

上一篇:词汇积累

下一篇:SeqStack

给主人留下些什么吧!~~