全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:882
推到 Plurk!
推到 Facebook!

關於動態鏈結刪除記憶體的問題

尚未結案
光月
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-23 22:56:01 IP:211.75.xxx.xxx 未訂閱
我的程式終於快完成了......最後這個問題課本裡似乎沒說,只好上來問各位高手,程式:  
 void res_delete(){
   char res;
   cout<<"1.全部刪除"<>res;
      if(res<'0'||res>'3')        cout<<"請輸入1~2:";
   }while(res<'0'||res>'3');
   switch(res){
   case '1':      <====如何才能全部刪除現有的記憶體
      stu=first;
      stu=NULL;
      delete stu;
      break;
   case '2':
           cout<<"請輸入欲刪除第幾筆資料:";
           while(1){
                   cin>>res;
              if(res>0&&res<=count)        break;
              cout<<"請輸入1~"<next==NULL);i  )
                   stu=stu->next;
           rec *back,*ptr;
           back=stu;
           ptr=stu->next;
           if(res==1)  cout<<"不可刪除第一筆資料,但可修改!"<next=ptr->next;
                   if(ptr->next==NULL)        last=back;
                   delete ptr;
           }
           break;
   }
}
書本裡只說如何第一個除外的記憶體位置,而且第一個記憶體好像也不能刪除,只能刪除其它的.......希望有大大能指點一下,該如何刪除全部的記憶體呢?
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-24 16:08:40 IP:218.170.xxx.xxx 未訂閱
試看看改成下面的程式碼
   case '1':      <====如何才能全部刪除現有的記憶體
           stu=first;
           while(stu != NULL)
           {
                   stu = stu->next;
                   delete first;
                   first = stu;
           }
      break;
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-24 16:15:25 IP:218.170.xxx.xxx 未訂閱
要刪除第一筆資料也不是不可。 而是你要把記錄第一筆的指標移到下一個。 例:
if (first == NULL)
{
     cout << "錯誤!已無任何資料”;
}
else
{
     stu=first->next;
     delete first;
     first = stu;
}
光月
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-24 23:53:09 IP:211.75.xxx.xxx 未訂閱
喔喔喔!!!!!原來first指標還可以這樣用啊,謝謝這位大大的指點,是個極佳的觀念,我還有一個動態指標的疑問耶,就是  
ptr=ptr->next;<====這樣是表示往下一個指標移動
{  stu=first;
   ptr=stu;
   prev=stu->next;
   stu=stu->next;
   stu=ptr;
}<====這是我知道的往回退一個指標移動
 
這樣的往回退寫法過於複雜且麻煩......,除了用雙向以外的, 不知道有沒有更簡便的往回退寫法呢? 煩請大大再指點。
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-25 10:58:22 IP:218.170.xxx.xxx 未訂閱
往回退也可以這樣寫。
//stu 表示目前的指標
//ptr 暫存指標
ptr = first;
while(ptr != NULL)
{
     if (ptr->Next == stu)
         break;
     ptr = ptr-Next;
}
stu = ptr;
光月
一般會員


發表:2
回覆:5
積分:1
註冊:2004-12-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-25 17:13:25 IP:211.75.xxx.xxx 未訂閱
喔喔喔!!!!!! 這樣寫比較簡潔的感覺,謝謝這位大大的細心指教,是個很好的觀念
系統時間:2024-09-30 17:05:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!