#ifndef My_Head_H
#define My_Head_H
#include "G://code/c++/myhead.h"
#endif // !My_Head_H
template <typename ElemType>
class LinkList
{
/* data */
public:
//非循环单链表节点的类声明
class List_Node
{
public:
ElemType data; //结点数据
List_Node* next; //指向下一个结点的指针
};
typedef List_Node *NodePointer; //指向结点的指针类型说明
//链表置空
void clear();
//求链表结点个数
int GetLength();
//取第i个结点
Status GetItem(int i, ElemType& e);
//取第一个结点的指针
NodePointer GetHead()
{
return head;
}
//删除第i个结点
Status DeleteItem(int i);
//在第i个结点之前插入一个数据为e的结点
Status Insert(int i, ElemType e);
//打印出每一个结点的值
void Display_All();
//以随机数填充num个结点
Status Random_Fill(int num);
LinkList();
~LinkList();
protected:
NodePointer head;
};
template <typename ElemType>
void LinkList<ElemType>::clear()
{
NodePointer p, q;
p = NULL;
q = head;
while (q)
{
p = q;
q = q->next;
delete p;
}
head = NULL;
}
template <typename ElemType>
int LinkList<ElemType>::GetLength()
{
NodePointer q;
q = head;
int num = 0;
while (q)
{
num++;
q = q->next;
}
return num;
}
template <typename ElemType>
Status LinkList<ElemType>::GetItem(int i, ElemType& e)
{
int count = 1;
NodePointer q;
q = head;
while (count<i && q)
{
count++;
q = q->next;
}
//若q为空或者i超过列表结点个数,返回error
if (!q || count > i) return ERROR;
e = q->data;
return OK;
}
/*template<typename ElemType>
LinkList<ElemType>::NodePointer LinkList<ElemType>::GetHead()
{
return head;
}*/
template <typename ElemType>
Status LinkList<ElemType>::DeleteItem(int i)
{
int count = 1;
NodePointer p,q;
q = head;
p = NULL;
while (count < i && q)
{
count++;
p = q;
q = q->next;
}
//若q为空或者i超过列表结点个数,返回error
if (!q || count > i) return ERROR;
return OK;
p->next = q->next;
delete p;
}
template <typename ElemType>
Status LinkList<ElemType>::Insert(int i, ElemType e)
{
int count = 1;
NodePointer p, q, s;
q = head;
while (count < i && q)
{
count++;
q = q->next;
}
//若q为空或者i超过列表结点个数,返回error
if (!q || count > i) return ERROR;
s = new List_Node;
s->data = e;
s->next = q->next;
q->next = s;
}
template<typename ElemType>
inline void LinkList<ElemType>::Display_All()
{
NodePointer q = head;
cout << "Here are all data in linklist";
while (q)
{
cout << q->data << "->";
q = q->next;
}
cout << "end" << endl;
}
template<typename ElemType>
Status LinkList<ElemType>::Random_Fill(int num)
{
NodePointer p, q;
q = head;
if (q == NULL)
{
q = new List_Node;
q->data = random(100);
q->next = NULL;
head = q;
}
for (int i = 0; i < num; i++)
{
p = new List_Node;
p->data = random(100);
q->next = p;
q = p;
}
q->next = NULL;
return OK;
}
template<typename ElemType>
LinkList <ElemType>::LinkList()
{
head = NULL;
}
template<typename ElemType>
LinkList <ElemType>::~LinkList()
{
clear();
}
其中myhead.h是一个储存基本配置的头文件。
#include <istream>
#include<stdio.h>
#include<stdlib.h>
#include <ctime>
using namespace std;
typedef int Status;
#define ERROR 0;
#define OK 1;
#define random(x) (rand()%x)