SOGO論壇
  登入   註冊   找回密碼
查看: 857|回覆: 2
列印 上一主題 下一主題

[程式設計] 鏈結串列的執行 [複製連結]

Rank: 2

狀態︰ 離線
跳轉到指定樓層
1
發表於 2011-5-28 12:31:18 |只看該作者 |正序瀏覽
想請教各為以下程式編譯錯誤百出,我又不懂到底是有哪些問題,能否請大家教我下面程式改怎們樣讓它可以執行嘛?







#include <iostream>
#define NODE
using namespace std;

   
typedef struct node NODE
   {
      int data;
      struct node *link;
      
   }NODE ;



  NODE *new()
  {
     NODE *p;
     p = (NODE  *)malloc(sizeof(NODE));
   
    if( p == NODE )
    {
      printf("記憶體不足");
      exit(1);
    }
      return(p);
  }


NODE  *create()
{
  NODE  *list, *p, *q;
  int i, n, d;
  list=new();
  list->link=NULL;     p=list;
  printf("輸入資料筆數:");
  scanf("%d", &n);
  for(i=1; i<=n; i++){
       printf("輸入第%d筆資料",i);
       scanf("%d", &d);
       q=new();
       q->data=d;   q->link=NULL;
       p->link=q;
       p=q;
  }
return(list);
}

NODE  *search( NODE  *list,  int d )
{
  NODE *p;
  p=list->link;
  while( p != NULL && p->data != d)    p=p->link;
  return(p);
}

NODE  *prenode( NODE *list, NODE *q )
{
  NODE *p;
  p=list;
  while( p != NULL && p->link != q)     p = p->link;
  return(p);
}



int insert(NODE  *p,  NODE  *q)
{
  q->link=p->link;
  p->link=q;
}

void delete(NODE  *p,  NODE  *q)
{
  p->link=q->link;
  free(q);
}



NODE  *create()
{
  NODE  *list, *p, *q;
  int i, n, d;
  list=new();
  list->link=NULL;     p=list;
  printf("輸入資料筆數:");
  scanf("%d", &n);
  for(i=1; i<=n; i++){
       printf("輸入第%d筆資料",i);
       scanf("%d", &d);
       q=new();
       q->data=d;   q->link=NODE;
       p->link=q;
       p=q;
  }
return(list);
}


NODE  *search( NODE  *list,  int d )
{
  NODE *p;
  p=list->link;
  while( p != NULL && p->data != d)    p=p->link;
  return(p);
}

NODE  *prenode( NODE *list, NODE *q )
{
  NODE *p;
  p=list;
  while( p != NULL && p->link != q)     p = p->link;
  return(p);
}



int insert(NODE  *p,  NODE  *q)
{
  q->link=p->link;
  p->link=q;
}
int delete(NODE  *p,  NODE  *q)
{
  p->link=q->link;
  free(q);
}


int length(NODE *list)
{
    NODE *p;
    int counter=0;
    p=list->link;
    while(p!=NULL){
        counter++;
        p=p->link;
    }
  return(counter);
}



void display(NODE *list)
{
  NODE *p;

  p=list->link;
  while(p !=NULL){
       printf("%5d",p->data);
       p=p->link;
  }
  printf("\n");
}




int main()
{
  NODE *list,*p,*q;
  int loop=1,d,d1;
  char input[8];
  printf("***鏈結串列***\n");
  printf("可執行下列指令:create,insert,delete,display,length,exit\n");
  list=NULL;
  do{
      printf("==>");
      scanf("%s", input);
     
     
     if(strcmp(input, "create")==0)
     {
           list=create();
     }




else if(strcmp(input, "delete")==0)
   {
       printf("輸入資料:");
       scanf("%d", &d);
       q=search(list, d);
      
       if(q == NULL)
       {
        printf("找不到資料%d,故無法刪除\n", d);
       }
        
       else
       {
           p=prenode(list,q);    delete(p,q);
       }
  else if(strcmp(input,"display")==0)
  {
       display(list);
  {     
  else if(strcmp(input,"length")==0)
   {
       printf("串列中資料的個數=%d\n",length(list));
   }   
  else if(strcmp(input,"exit")==0)
  {
       1oop=0;
  }     
  else
   {
       printf("輸入錯誤\n");
   }   
  
  } while(1oop);
} /*main()*/










執行結果:
***鏈結串列***
可執行下列指令:create, insert, delete, display, length, exit
==>create
輸入資料筆數:4
輸入第1筆資料: 1
輸入第2筆資料: 3
輸入第3筆資料: 5
輸入第4筆資料: 7
==>insert
輸入資料:4
要插入於哪筆資料值之後?3
==>display
    1 3 4 5 7
==>delete
輸入資料:5
==>length
length=4
==>display
    1 3 4 7
==>exit
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
3
發表於 2011-6-10 20:33:11 |只看該作者
我沒有很仔細看,但是隨便找本資料結構的書都會講解Linked-List,要幫你寫也不會太難。不過光是看到
NODE *new() 這個就很大的問題

一般來說現在windows 環境中 的Compiler(編譯器)都會同時支援C/C++,而new 是C++的keyword 這樣當然會錯
除非你使用的是GNU C(gcc) 或者是GNU C++(g++) 將C跟C++ 分別處理的編譯器 這樣才會有可能成功
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 1 感謝您熱心幫助會員解決問題,論壇需要您 ...

總評分: 威望 + 1   查看全部評分

Rank: 3Rank: 3

狀態︰ 離線
2
發表於 2011-5-30 00:19:14 |只看該作者
我也是個新手,有錯請指教~

首先有點怪異的是上面include的是c++的標頭檔

,但是下面全部都是用C的語法…- -+

粗略的看了一下,錯誤真的挺多的…在動態配置新的struct時的語法

還有函式的用法,我也是第一次看到@@

不過大概整體架構都有出來了,稍微小修改錯誤的語法應該是可以run才對
已有 1 人評分威望 收起 理由
紅塵孤鳥 + 1 感謝您熱心幫助會員解決問題,論壇需要您 ...

總評分: 威望 + 1   查看全部評分

請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-11-1 09:21

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部