CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

那位大虾能详尽展示C#指针的用法——实现链表? 不胜感激!

楼主pH13lj()2005-06-02 17:53:06 在 .NET技术 / C# 提问

如题。  
          另外,我总是引用不了对象中的指针。编译时总是提示指针前不能用"."运算符。(大致是这样的提示)  
  请教过来人指点!!  
          谢谢! 问题点数:0、回复次数:3Top

1 楼Ninputer(装配脑袋)回复于 2005-06-02 18:04:08 得分 0

在c#中只有值类型才能使用指针,这使得指针的使用非常受限制。你可以用引用代替指针,实现链表非常方便。Top

2 楼pH13lj()回复于 2005-06-03 09:23:17 得分 0

给个代码示例好吗?  
  谢谢!Top

3 楼mathsword(梦在流浪)回复于 2005-06-03 09:35:40 得分 0

用C#实现数据结构(2)   -   链表(不带头结点)    
   
   
   
  using   System;    
     
  namespace   CS数据结构    
  {    
          /**////   <summary>    
          ///   结点类    
          ///   为方便起见,结点数据类型用int表示    
          ///   </summary>    
          public   class   ListNode    
          {    
                  public   int   data;         //ElemType    
                  public   ListNode()    
                  {    
                  }    
                  public   ListNode   next;    
          }    
     
          /**////   <summary>    
          ///   链表类    
          ///   </summary>    
          public   class   LinkList    
          {    
                  private   ListNode   first;                         //第一个结点    
                  public   LinkList()    
                  {    
                          first   =   null;    
                  }    
     
                  public   bool   IsEmpty()    
                  {    
                          return   first   ==   null;    
                  }    
     
                  public   int   Length()    
                  {    
                          ListNode   current   =   first;    
                          int   length   =   0;    
                          while(current   !=   null)    
                          {    
                                  length++;    
                                  current   =   current.next;    
                          }    
                          return   length;    
                  }    
     
                  /**////   <summary>    
                  ///   返回第k个元素至x中    
                  ///   </summary>    
                  ///   <param   name="k"></param>    
                  ///   <param   name="x"></param>    
                  ///   <returns>如果不存在第k个元素则返回false,否则返回true</returns>    
                  public   bool   Find(   int   k,   ref   int   x   )    
                  {    
                          if(   k<1   )    
                                  return   false;    
                          ListNode   current   =   first;    
                          int   index   =   1;    
                          while(   index<k   &&   current   !=   null   )    
                          {    
                                  current   =   current.next;    
                                  index++;    
                          }    
                          if(   current   !=   null   )    
                          {    
                                  x   =   current.data;    
                                  return   true;    
                          }    
                          return   false;    
                  }    
     
                  /**////   <summary>    
                  ///   返回x所在的位置    
                  ///   </summary>    
                  ///   <param   name="x"></param>    
                  ///   <returns>如果x不在表中则返回0</returns>    
                  public   int   Search(   int   x   )    
                  {    
                          ListNode   current   =   first;    
                          int   index   =   1;    
                          while(   current   !=   null   &&   current.data   !=x   )    
                          {    
                                  current   =   current.next;    
                                  index++;    
                          }    
                          if(current   !=   null)    
                                  return   index;    
                          return   0;    
                  }    
     
                  /**////   <summary>    
                  ///   删除第k个元素,并用x返回其值    
                  ///   </summary>    
                  ///   <param   name="k"></param>    
                  ///   <param   name="x"></param>    
                  ///   <returns></returns>    
                  public   LinkList   Delete(   int   k,   ref   int   x   )    
                  {    
                          //如果不存在第k个元素则引发异常    
                          if(   k<1   ||   first   ==   null   )    
                                  throw(   new   OutOfBoundsException()   );    
                          ListNode   pNode   =   first;                 //pNode将最终指向第k个结点    
                          //将pNode移动至第k个元素,并从链表中删除该元素    
                          if(   k   ==   1   )         //pNode已经指向第k个元素    
                                  first   =   first.next;                 //删除之    
                          else    
                          {    
                                  //用qNode指向第k-1个元素    
                                  ListNode   qNode   =   first;    
                                  for(   int   index=1;   index<   k-1   &&   qNode   !=   null;   index++   )    
                                          qNode   =   qNode.next;    
                                  if(   qNode   ==   null   ||   qNode.next   ==   null   )    
                                          throw(   new   OutOfBoundsException()   );//不存在第k个元素    
                                  pNode   =   qNode.next;         //pNode指向第k个元素    
                                  qNode.next   =   pNode.next;         //从链表中删除第k个元素    
                                  x   =   pNode.data;    
                          }    
                          return   this;    
                  }    
     
                  /**////   <summary>    
                  ///   在第k个元素之后插入x    
                  ///   </summary>    
                  ///   <param   name="k"></param>    
                  ///   <param   name="x"></param>    
                  ///   <returns></returns>    
                  public   LinkList   Insert(   int   k,   int   x   )    
                  {    
                          //如果不存在第k个元素,则引发异常OutOfBoundsException    
                          if(   k<0   )    
                                  throw(   new   OutOfBoundsException()   );    
                          ListNode   pNode   =   first;                 //pNode将最终指向第k个结点    
                          for(   int   index   =   1;   index<k   &&   pNode   !=   null;   index++   )    
                                  pNode   =   pNode.next;    
                          if(   k>0   &&   pNode   ==   null   )    
                                  throw(   new   OutOfBoundsException()   );//不存在第k个元素    
                          ListNode   xNode   =   new   ListNode();    
                          xNode.data   =   x;    
                          if(   k>0   )    
                          {    
                                  //在pNode之后插入    
                                  xNode.next   =   pNode.next;    
                                  pNode.next   =   xNode;    
                          }    
                          else    
                          {    
                                  //作为第一个元素插入    
                                  xNode.next   =   first;    
                                  first   =   xNode;    
                          }    
                          return   this;    
                  }    
     
                  public   void   Clear()    
                  {    
                          first   =   null;    
                  }    
     
                  public   void   OutPut()    
                  {    
                          ListNode   current;    
                          for(   current   =   first;   current   !=   null;   current   =   current.next   )    
                          {    
                                  Console.Write("{0}",   current.data.ToString()   );    
                          }    
     
                          Console.WriteLine();    
                  }    
          }    
  }Top

相关问题

  • 关于c++指针*与&的用法?
  • 一个C语言里函数指针的用法!!!!!在线
  • 指针的用法
  • 数组指针的用法?
  • 指针用法问题
  • 掌握 C++ 指针?
  • C++指针问题
  • C++指针问题
  • 指向函数的指针的用法!?
  • 关于指针数组的用法

关键词

  • c#
  • 指针
  • 结点
  • null
  • listnode
  • xnode
  • 元素
  • current
  • linklist
  • 返回

得分解答快速导航

  • 帖主:pH13lj

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo