单循环链表类的定义和实现
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
//一些函数我们还是要把他们独立封装出来,以便更好利用.
//关于这些函数的结构问题,要参考软件工程有关资料.
出现了这样情况是在这两行写错了
~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]