链表

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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值