1. 程式人生 > >線性表——對順序表的操作

線性表——對順序表的操作

#ifndef LIST_H
#define LIST_H

class List
{
public:
	List(int size);
	~List();
	void CleanList();
	bool ListEmpty();
	int ListLength();                                    //獲取線性表長度
	bool GetElem(int i,int *e);                        //獲取指定元素
	int LocateElem(int *e);                            //尋找第一個滿足e的資料元素的位序
	bool PriorElem(int *currentElem,int *preElem);    //獲取指定元素的前驅
	bool NextElem(int *currentElem,int *nextElem);    //獲取指定元素的後繼
	bool ListInsert(int i,int *e);                     //在第i個位置插入元素
	bool ListDelete(int i,int *e);                     //刪除第i個位置的元素
	void ListTraverse();                                 //遍歷線性表

private:
	int *m_pList;
	int m_iSize;
	int m_iLength;
};
#endif#include"List.h"
#include
using namespace std;

List::List(int size)
{
	m_iSize=size;
	m_pList=new int[m_iSize];
	m_iLength=0;
}

List::~List()
{
	delete[] m_pList;
	m_pList=NULL;
}

//直接將m_iLength設為0,此時list中的資料還是存在的,但是已經被忽略了,
//再有資料的時候直接插入將其覆蓋掉就可以了。
void List::CleanList()
{
	m_iLength=0;
}

bool List::ListEmpty()
{
	if(m_iLength==0)
	{
		return true;
	}
	return false;
}

int List::ListLength()
{
	return m_iLength;
}

bool List::GetElem(int i,int *e)
{
	if(i<0||i>=m_iSize)
	{
		return false;
	}
	else
	{
		*e=m_pList[i];
		return true;
	}	
}

int List::LocateElem(int *e)
{
	for(int i=0;im_iLength)
	{
		return false;
	}
	for(int k=m_iLength-1;k>=i;k--)
	{
		m_pList[k+1]=m_pList[k];
	}
	m_pList[i]=*e;
	m_iLength++;        //插入資料之後,資料長度會增長
	return true;
}


bool List::ListDelete(int i,int *e)
{
	if(i<0||i>=m_iLength)
	{
		return false;
	}
	*e=m_pList[i];
	for(int k=i+1;k
#include
#include"List.h"
#include
using namespace std;

/****************************************************************************************/
/**線性表--順序表**/

//   3  5  6
//其中假設指定元素是5,那麼前驅就是3,後繼就是6。

//bool InitList(List **list);                                    //建立線性表
//void DestroyList(List *list);                                  //銷燬線性表
//void CleanList(List *list);                                    //清空線性表
//bool ListEmpty(List *list);                                    //判斷線性表是否為空
//int ListLength(List *list);                                    //獲取線性表長度
//bool getElem(List *list,int i,Elem *e);                        //獲取指定元素
//int locateElem(List *list,Elem *e);                            //尋找第一個滿足e的資料元素的位序
//bool PriorElem(List *list,Elem *currentElem,Elem *preElem);    //獲取指定元素的前驅
//bool NextElem(List *list,Elem *currentElem,Elem *nextElem);    //獲取指定元素的後繼
//bool ListInsert(List *list,int i,Elem *e);                     //在第i個位置插入元素
//bool ListDelete(List *list,int i,Elem *e);                     //刪除第i個位置的元素
//void ListTraverse(List *list);                                 //遍歷線性表

/****************************************************************************************/
int main(void)
{
	//3 5 7 2 9 1 8
	int e1=3;
	int e2=5;
	int e3=7;
	int e4=2;
	int e5=9;
	int e6=1;
	int e7=8;
	int temp=0;
	List *list1=new List(10);
	//cout<<"lenth:"<ListLength()<ListInsert(0,&e1);
	//cout<<"lenth:"<ListLength()<ListInsert(1,&e2);
	list1->ListInsert(2,&e3);
	list1->ListInsert(3,&e4);
	list1->ListInsert(4,&e5);
	list1->ListInsert(5,&e6);
	list1->ListInsert(6,&e7);
	//list1->ListInsert(3,&e7);

	//list1->ListDelete(0,&temp);
	/*if(!list1->ListEmpty())
	{
		cout<<"not empty"<CleanList();
	if(list1->ListEmpty())
	{
		cout<<"empty"<ListEmpty();*/
	list1->ListTraverse();
	//cout<<"#"<GetElem(0,&temp);
	cout<<"temp:"<LocateElem(&temp)<PriorElem(&e4,&temp);
	cout<<"前驅:"<NextElem(&e4,&temp);
	cout<<"後繼:"<~List();
	system("pause");
	return 0;
}

以上內容來源於慕課網。