SOGO論壇

標題: 鏈結串列的執行 [列印本頁]

作者: 超級61    時間: 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
作者: ppap    時間: 2011-5-30 00:19:14

我也是個新手,有錯請指教~

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

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

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

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

不過大概整體架構都有出來了,稍微小修改錯誤的語法應該是可以run才對
作者: alphi    時間: 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++ 分別處理的編譯器 這樣才會有可能成功




歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM