单循环链表类的定义和实现

cirlinklist.h的重要性:

typedef int ElemType ;

typedef struct Lnode{

ElemType data;

Lnode *next;

}LNode;

class cirlinklist

private :

LNode * head;

LNode * curr;

                                    int count;//奇怪这个为什么设定为private,却在那个什么函数中可见.这其实涉及到一个关于 // private的问题

public:

//构造函数

 

//析构函数

 

//

 

//清空单链表

 

//检查单链表是否为空?

 

//返回指向第pos个结点的指针

 

//返回单链表中指定的序号的结点值

 

//历遍单链表

 

//当前指针curr指向pos结点并返回curr,需要研究这个函数的必要性

 

//当前指针指向下一个结点并且返回

 

//判断单循环链表当前指针curr==head否?

 

 

//判断单链表当前指针curr->next是否到达表未?

 

//删除单链表当前指针curr->next所指结点,并返回其值

 

//从单链表中查找元素

 

//更新单链表中给定的元素

 

//向单链表第pos个结点插入域值未item的新结点

 

//从链表中删除第pos个结点并且返回被删结点的data

 

//一些函数我们还是要把他们独立封装出来,以便更好利用.

//关于这些函数的结构问题,要参考软件工程有关资料.

 

image

出现了这样情况是在这两行写错了

~cirlinklist(){ delete head;}

LNode *CreateCLinkL( int,int,int mark=0;)

改为

 

~cirlinklist(){ delete head;}

LNode *CreateCLinkL( int,int,int mark=0);

这是一个细节问题,也要适当主意一下;

 

代码的一些原理:

 

LNode *cirlinklist ::CreateCLinkL(int n, int m,int mark)
{

ElemType x, a[LEN];
srand(m);
for(int i=0,i<n;i++) a[i]=rand()%100;
for(i=0;i<n-1;i++)
{
     int k=i;
     for (int j=i+1;j<n;j++)
         if (a[k]>a[j])
             k=j;
         if (k!=i)
         {x=a[k];a[k]=a[i];a[i]=x;}
}

 

不要被这几i,j,k,搞混了

我们从最内的分析起:

     int k=i;
     for (int j=i+1;j<n;j++)
         if (a[k]>a[j])
             k=j;
         if (k!=i)
         {x=a[k];a[k]=a[i];a[i]=x;}

这一段的分析

a[0],a[1],a[2],...a[i],a[i+1],a[i+2],......a[n-1]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2009-05-04 21:34  fleetwgx  阅读(1031)  评论(0编辑  收藏  举报