您的位置:首页 > 其它

链表

2015-06-10 15:01 357 查看
SqList.h(顺序存储线性表)

#pragma once
#include "stdafx.h"
#include <iostream>
using namespace std;
/************************************************************************/
/* 线性表的顺序存储                                                            */
/************************************************************************/
#define  MAX_LEN 5
template<typename T>
class CSqList
{
public:
CSqList();
~CSqList(void);
public:
bool Sq_insert(T data,int index);
bool Sq_delete(int index);
void Sq_show();
bool Sq_getElement(int index,T& ret);
private:
int m_length;
T m_data[MAX_LEN];
};

template<typename T>
CSqList<T>::CSqList():m_length(0)
{

}

template<typename T>
CSqList<T>::~CSqList(void)
{
}

template<typename T>
bool CSqList<T>::Sq_insert(T data,int index)
{
if(m_length >= MAX_LEN)
{
return false;
}

if(index > m_length)
{
return false;
}

for (int i=m_length-1; i > index;i--)
{
m_data[i+1] = m_data[i];
}

m_data[index] = data;

m_length++;
}

template<typename T>
bool CSqList<T>::Sq_delete(int index)
{
if(m_length == 0)
{
return false;
}

if((index >= m_length) || (index < 0))
{
return false;
}

for(int i = index+1;i < m_length;i++)
{
m_data[i-1] = m_data[i];
}
m_length--;
return true;
}
template<typename T>
void CSqList<T>::Sq_show()
{
if(m_length == 0)
{
return;
}

for(int i=0 ; i < m_length;i++)
{
cout<<m_data[i]<<" ";
}
cout<<endl;
}

template<typename T>
bool CSqList<T>::Sq_getElement(int index,T& ret)
{
if(this->m_length == 0)
{
return false;
}

if(index >= this->m_length)
{
return false;
}

ret = m_data[index];

return true;
}


LinkList.h(链式存储线性表)

#pragma once
#include "stdafx.h"
#include <iostream>
using namespace std;

template<typename T>
class CLinkList
{
public:
CLinkList(void);
~CLinkList(void);
public:
bool list_insert(int index,T element);
bool list_delete(int index);
bool list_getElement(int index,T& element);
void list_show();
void list_clear();
private:
struct SNode{
T data;
struct SNode *next;
};

SNode* head;
};
template<typename T>
CLinkList<T>::CLinkList(void):head(NULL)
{
head = new SNode();

if(!head)
{
return;
}
head->data = 0;
head->next = NULL;
}

template<typename T>
CLinkList<T>::~CLinkList(void)
{
SNode* p =head;

while (head)
{
SNode* q = p;
p = p->next;
delete q;
}
}

template<typename T>
void CLinkList<T>::list_clear()
{
SNode* p =head;

while (p)
{
SNode* q = p;
p = p->next;
delete q;
}
}
template<typename T>
bool CLinkList<T>::list_insert(int index,T element)
{
if(!head)
{
return false;
}
SNode* p= head;
int j=1;

while(p && j < index)
{
p = p->next;
j++;
}

if(!p && j > index)
{
return false;
}

SNode* s = new SNode();
s->data = element;
s->next = p->next;
p->next = s;
return true;
}

template<typename T>
bool CLinkList<T>::list_delete(int index)
{
SNode* p = head;

int j = 1;

while(p && j < index)
{
p = p->next;
j++;
}

if(!p || j < index)
{
return false;
}

SNode* q = p->next;
p->next = q->next;

delete q;

return true;
}
template<typename T>
bool CLinkList<T>::list_getElement(int index,T& element)
{
SNode* p = head;

int j = 0;
while(p && j < index)
{
p = p->next;
j++;
}

if(!p || j > index)
{
return false;
}

element = p->data;

return true;
}

template<typename T>
void CLinkList<T>::list_show()
{
SNode* p = head->next;

cout<<"|********************start***************************|"<<endl;
while(p)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl<<"|********************end***************************|"<<endl;
}
调用:

main.cpp

// dataStruct_Test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "SqList.h"
#include "LinkList.h"

int _tmain(int argc, _TCHAR* argv[])
{
CSqList<int> myList;
myList.Sq_insert(1,0);
myList.Sq_insert(2,1);
myList.Sq_insert(3,2);
myList.Sq_insert(4,3);
myList.Sq_insert(10,2);
myList.Sq_insert(5,5);
int val = 0;
myList.Sq_getElement(2,val);
cout<<val<<endl;

myList.Sq_show();

myList.Sq_delete(2);

myList.Sq_show();

////////////////////////////////////////////////////////
CLinkList<int> linklist;
linklist.list_insert(1,1);
linklist.list_insert(2,2);
linklist.list_show();
linklist.list_getElement(1,val);
cout<<val<<endl;

linklist.list_insert(2,10);
linklist.list_show();

linklist.list_delete(2);
linklist.list_show();
linklist.list_clear();

system("pause");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: