回 帖 发 新 帖 刷新版面

主题:[讨论]求救啊!~~~~~~~~~~~~~~~~

有//注解的我不会帮助我一下!!!
 
#include <iostream>
using namespace std;

const MAX = 100;
struct NODE
{
   int data;
   NODE *next;
};

typedef NODE LIST;

void IniList(LIST *&list)
{
 list = new NODE;
 list->next = NULL;
}

bool Empty(LIST *&list)
{
   return list->next == NULL;
}

int Length(LIST *&list)
{
   int result = 0;
   NODE *p = list->next;
   while(p)
   {   
      p = p->next;
      result++;
   }
   return result;
}

bool Insert(LIST *&list, int k, int x)
{
   if(k<0 || k>Length(list)+1) return false;
   NODE *p = list;
   for(int i=1; i<k; i++)
      p=p->next;
   NODE *newNode = new NODE;
   newNode->data = x;
   newNode->next = p->next;
   p->next = newNode;
   return true;
}

void PrintList(LIST *&list)
{
   NODE *p = list->next;
   while(p)
   {
       cout<<p->data<<' ';
      p = p->next;
   }
   cout<<endl;
}

//void ClearList(LIST *&list)
{
  


 
}


void main()
{
 LIST *L=NULL;
 IniList(L);
 cout<<Empty(L)<<endl;
 for(int i=0; i<5; i++)
   Insert(L,1,i*5);
 cout<<Length(L)<<endl;
 //   cout<<Retrieve(L,2)<<endl;
 //  cout<<Locate(L,5)<<endl;
 PrintList(L);
 ClearList(L);
 cout<<Empty(L)<<endl;
}

回复列表 (共2个回复)

沙发

//////////////////////////////////////////////
//我觉得楼主的东东有些乱啊...
// 你可以把 list 定义为class 
// 用一个 NODE*  LIST; 你可以用LIST来操作真个列表了
// 我把你的东西改动了一些, 不知妥当否.....
// ////////////////////////////////////////////
#include <iostream>
using namespace std;

const MAX = 100;
struct NODE
{
   int data;
   NODE *next;
   NODE(int data_in, NODE* next_in=NULL) //没有构造函数怎么初始化的data ,next 呢?
   {
       data=data_in;
       next=next_in;
   }
};

class L
{
    NODE* LIST;    //LIST 就是一给NODE指针 指向整个列表的第一个NODE 
public:
void IniList()
{
  LIST=NULL;      // 表示列表刚刚创建 没有东西 所以头指针是指向NULL 
}

bool Empty()
{
   return LIST == NULL;  // 头指针指向NULL 就说明列表示空的 
}

int Length()
{
   int result = 0;
   NODE *p = LIST;    // p从列表头开始
   while(p)
   {   
      p = p->next;
      result++;
   }
   return result;
}

bool Insert( /*int k, int x*/ 
            int postion, int data) // 不加注释的程序最好用有意义的变量名
{
   if(postion<0 || postion>Length())
       return false;
   NODE *p = LIST;
   for(int i=1; i<postion; i++)
   {
      p=p->next;
  }
   NODE *newNode = new NODE(data);
   if(LIST==NULL)    //如果列表就是空的直接插入 
   {
       LIST=newNode;
       return true;
   }
   newNode->next = p->next;
   p->next = newNode;
   return true;
}

void PrintList()
{
   NODE *p =LIST;
   if(p==NULL)   //如果列表为空的就不用再做下面的循环了 节省时间空
   {
       cout<<"列表为空! "<<endl;
   }
   while(p)
   {
       cout<<p->data<<' ';
      p = p->next;
   }
   cout<<endl;
}

void ClearList()
{
   delete LIST; // 把头指针给释放掉 就把裂变clear了  
}
int Retrieve(int postion) //找到postion 位置的数据 并返回
{
    if(postion<0 ) 
    {
        cout<<"输入超出不在列表范围内 "<<endl;
        return NULL;
    }
   NODE *p = LIST;
   for(int i=1; i<postion; i++)
      p=p->next;
   return p->data;
}
}; // end of class L

void main()
{
   L list;   //生成一个L的对象
   list.IniList();  // 初始化该对象
   cout<<list.Empty()<<endl;
   for(int i=0; i<5; i++)
      list.Insert(i,i*5);
   cout<<list.Length()<<endl;
//   cout<<list.Retrieve(2)<<endl;
   list. PrintList();
   list.ClearList();
  cout<<list.Empty()<<endl;
}
// 作程序的时候要注意用面向对象的思维
// 把数据和方法包装成一个结构 一个类 
// 这样有利于数据的保护和操作的方便性
多多交流, 共同学习,共同进步。。。。。

板凳


我的程序无问题!是个指针的键表!每插入数据都是有动态申请空间!但是我不清楚是一个串好的指针键表如何删除!

我来回复

您尚未登录,请登录后再回复。点此登录或注册