C++数据结构路程:第二章一阶段,单链表 完成版

程序没错,但是运行不起来,再看看后再改  PS:已改为完成版,都是小错误!,目前可以潇洒运行和测试

 

#include "stdafx.h"
#include<iostream>

using namespace std;
class Node
{
private:
 int data;
 Node*pnext;
 friend class slist;
public:
 Node()
 {
  pnext = NULL;
 };
 Node(int n){data=n;};
 ~Node();
 int Getdata();
 // friend ostream& operator<<(ostream os,Node out);
};
class slist
{
private:
 Node*phead;
public:
 slist();
 ~slist();
 int Length();
 Node*Find1(int n);
 Node*Find2(int vdata);
 bool Insert(int vdata,int n);        
 int  delet(int n);                  
 void Show(); 
};

Node::~Node(){}
int Node::Getdata()
{
 return this->data;
}
//ostream& operator<<(ostream& os,Node& out)
//{
// os<<out.data;
// return os;
//}
slist::slist()
{
 phead = new Node();
}
slist::~slist()
{
 while(phead!=NULL)
 {
  Node*ptemp;
  ptemp=phead->pnext;
  delete phead;
  phead=ptemp;
 }
}
int slist::Length()
{
 int count=0;
 Node*ptemp=phead->pnext;
 while(ptemp!=NULL)
 {
  ptemp=ptemp->pnext;
  count++;
 }
 return count;
}
Node*slist::Find1(int n)
{
 if(n<0)
 {
  cout<<"this operator is wrong!"<<endl;
  return NULL;
 }
 Node*ptemp;
 ptemp=phead->pnext;
 for(int i=0;i<n;i++)
 {
  ptemp=ptemp->pnext;
 if(ptemp==NULL)
 {
  cout<<"n is too big!"<<endl;
  return NULL;
 }
 }
 return ptemp;
}
Node*slist::Find2(int vdata)
{
 if(phead=NULL)
 {
  cout<<"there is no data"<<endl;
  return NULL;
 }
 Node*ptemp=phead->pnext;
 while(ptemp!=NULL&&!(ptemp->data==vdata))
 {
  ptemp=ptemp->pnext;
 }
 
 return ptemp;
 
}
bool slist::Insert(int vdata,int n)
{
 if(n<0)
 {
  cout<<"we can not do this"<<endl;
  return 0;
 }
 Node*pmove=phead;
 for(int i=0;i<n&&!(pmove==NULL);i++)
 {
  pmove=pmove->pnext;
 }
 if(pmove==NULL)
 {
  cout<<"there is no position!"<<endl;
  return 0;
 }
 Node*pinsert=new Node(vdata);

 pinsert->pnext=pmove->pnext;
 pmove->pnext=pinsert;
 return 0;
}
int slist::delet(int n)//DELET 第N之后的结点
{
 Node*pmove=phead;
 if(n<0)
 {
  cout<<"we can not do this"<<endl;
  return 0;
 }
 for(int i=0;i<n&&pmove->pnext;i++)
 {
  pmove=pmove->pnext;
 }
 if(pmove->pnext==NULL)
 {
  cout<<"can not delete NULL"<<endl;
  return 0;
 }
 Node*pdelete;
 pdelete=pmove->pnext;
 pmove->pnext=pdelete->pnext;
 int temp=pdelete->data;
 delete pdelete;
 return temp;
}
void slist::Show()
{
 Node*pmove=phead->pnext;

 while(pmove)
 {
  cout<<pmove->data;
  pmove=pmove->pnext; 
 
 }
}


int main(int argc, char* argv[])
{
 slist list;
  for(int i=0;i<10;i++)
  {
 
   list.Insert(i*3,i);
  }
  cout<<list.Length()<<endl;
  list.Show();
  cout<<list.Find1(4);
 return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值