數據結構-c++模板的線性錶鏈式存儲

測試框架

#include<iostream>  
#include"LinkList_cpp.cpp"
using namespace std;
struct Teacher
{
	char name[64];
	int age;
};
int main()
{
	Teacher t1, t2, t3, t4, t5, tmp;
	t1.age = 21;
	t2.age = 22;
	t3.age = 23;
	t4.age = 24;
	t5.age = 25;
	LinkList_cpp<Teacher> list;
	list.Inster(t1, 0);
	list.Inster(t2, 0);
	list.Inster(t3, 0);
	list.Inster(t4, 0);
	list.Inster(t5, 0);
	for (int i = 0; i < list.Length(); i++)                                                                
	{
		list.Get(tmp, i);
		cout << tmp.age << " ";
	}
	//鏈表的銷燬  
	while (list.Length()>0)
	{
		list.Delete(tmp, 0);
		cout << tmp.age << " ";
	}
	cout << "Hello,,," << endl;
	system("pause");

	return 0;
}

頭文件

LinkList_cpp.h

#pragma once
//在插入元素的時候,模板類中,應該把每一個t保存下來
//模板類中應該能非配節點 緩存節點=====》思想
//怎麼樣緩存,,做鏈表
template <typename T>
struct Node
{
	T t;
	Node<T> *next;
};

template <typename T>
class LinkList_cpp
{
public:
	LinkList_cpp(void);
	~LinkList_cpp(void);
	/*清空列表 回到初始狀態*/
	void Clear();
	/*獲取鏈表的長度*/
	int Length();
	/*獲取指定位置的鏈表的元素數據*/
    int Get(T &t, int pos);
	/*插入元素數據*/
	int Inster(T &t,int pos);
	/*元素數據刪除*/
	int Delete(T &t, int pos);
private:
	Node<T> *head;//在鏈表中 建一個待頭節點的鏈表
	int len;
};

頭文件的實現

LinkList_cpp.cpp

#include "LinkList_cpp.h"

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

template <typename T>
LinkList_cpp<T>::LinkList_cpp(void)
{

	head = new Node<T>;
	head->next = NULL;
	this->len=0;
}

template <typename T>
LinkList_cpp<T>::~LinkList_cpp(void)
{
	Node<T> *tmp = NULL;
	while (head!=NULL)
	{
		tmp = head->next;//刪除鏈表時候,緩存後面的點
		delete head;
		head = tmp;
	}
	len = 0;
	head = NULL;
}
/*清空列表 回到初始狀態*/
template <typename T>
void LinkList_cpp<T>::Clear()
{
	Node<T> *tmp = NULL;
	while (head != NULL)
	{
		tmp = head->next;//刪除鏈表時候,緩存後面的點
		delete head;
		head = tmp;
	}

	
	head = new Node<T>;
	head->next = NULL;
	int len = 0;
}
/*獲取鏈表的長度*/
template <typename T>
int LinkList_cpp<T>::Length()
{
	return len;
}
/*獲取指定位置的鏈表的元素數據*/
template <typename T>
int LinkList_cpp<T>::Get(T &t, int pos)
{
	Node<T> *current = NULL;
	current = head;
	for (int i = 0; i <pos; i++)
	{
		current = current->next;
	}
	t = current->next->t;//把緩存的t傳給調用者
	return 0;
}
/*插入元素數據*/
template <typename T>
int LinkList_cpp<T>::Inster(T &t, int pos)
{
	Node<T> *current = NULL;
	current = head;
	for (int i = 0; i <pos ; i++)
	{
		current = current->next;
	}
	//
	Node<T> *node = new Node<T>;
	if (node==NULL)
	{
		return 0;
	}
	node->t = t;//緩存外部數據
	node->next = NULL;
	//讓新節點 鏈接後續鏈表
	node->next = current->next;
	//讓位置2 連接新節點2
	current->next = node;
	len++;
	return 0;
}
/*元素數據刪除*/
template <typename T>
int LinkList_cpp<T>::Delete(T &t, int pos)
{
	Node<T> *current = NULL;
	Node<T> *ret = NULL;
	current = head;
	for (int i = 0; i <pos; i++)
	{
		current = current->next;
	}
	ret = current->next;//被刪除的元素
	t = ret->t;//把緩存t copy出來

	current->next = ret->next;
	len--;
	delete ret;
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章