欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單鏈表小test遇到的問題 [打印本頁]

作者: liuyang    時間: 2012-1-14 03:46
標題: 單鏈表小test遇到的問題
   看了數據結構前幾篇按自己思路 寫了個單鏈表的test ,   主要是創建和查找的測試。

#include<stdio.h>
#include<malloc.h>

struct list1{
 int wdata;
 struct list1 *node;   //指向下一個連表
};

void create_l(struct list1 &LL,int n)   //創建鏈表
{
    struct list1 *p,*q;
    int i;
 p=(struct list1 *)malloc(sizeof(struct list1));
 LL=*p;
 for(i=0;i<n;++i)
 {
      q=(struct list1 *)malloc(sizeof(struct list1));
   scanf("%d",&q->wdata);
   p->node=q;  前個鏈表元素的指針域為這個鏈表元素
   p=q;     //這個鏈表元素作為下個鏈表元素的前一個鏈表
 }
 p->node=NULL;
}

struct list1* fdata(struct list1 *b,int aa)   //查找數據
{
   while((b!=NULL)&&(b->wdata!=aa))
     b=b->node;
   return b;
}
int main()
{
 struct list1 cl;
 struct list1* cll;
  create_l(cl,5);
  cll=fdata(&cl,3);
  if (cll==NULL)
  {
   printf("NO");
  }else{
   printf("find");
  }
 return 0;
}

 

   我跑了下VC拋出了異常,于是我打斷點看了下發現  fdata()中的b鏈表沒有得到想要的,于是查看create_l()創建鏈表的函數,

我看了半天沒有發現邏輯上的問題,于是單步調試,發現LL的沒有指針域沒有賦值但是p明明賦了值,甚是奇怪,于是我查看了下 *p與LL看他們原始的內容,發現一致。于是我感到很納悶,于是又想到看看他們p與&LL的指針的值,發現不一樣。突然才恍然大悟。

 原來我 只是把p指向的stuct list1的內存拷貝了賦給LL,在后面的操作都是在p指向的內存中作操作,和LL的內存沒有任何關系。 這個錯誤對于我新手來說,還真容易犯啊。

 

void create_l(struct list1 &LL,int n)   //創建鏈表
{
    struct list1 *p,*q,*cl;
    int i;
 p=(struct list1 *)malloc(sizeof(struct list1));
 cl=p;     //把鏈表頭地址指針存放起來
 for(i=0;i<n;++i)
 {
      q=(struct list1 *)malloc(sizeof(struct list1));
   scanf("%d",&q->wdata);
   p->node=q;
   p=q;
 }
 p->node=NULL;
 LL=*cl;    //把鏈表頭地址的內容拷貝賦給LL,這樣下個鏈表元素的指針也copy 過來了。 
}

 

 寫雙鏈表的時候才發現這個創建其實是有問題的,代碼寫多了。改為

 

void create_l(struct list1 &LL)   //創建鏈表
{
    struct list1 *p,*q;
    int a;

    p=&LL;

  scanf("%d",&a);

while(a!=-1)      //輸入-1為結束

{
      q=(struct list1 *)malloc(sizeof(struct list1));
   scanf("%d",&q->wdata);
   p->node=q;  前個鏈表元素的指針域為這個鏈表元素
   p=q;     //這個鏈表元素作為下個鏈表元素的前一個鏈表

}
 p->node=NULL;
}

 

這樣才是正確的,呵呵,果然新手一開始什么問題都怪怪的。





歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1