数据结构-c++模板的线性表链式存储

本文介绍了使用C++模板实现线性表的链式存储结构,详细讲解了相关头文件LinkList_cpp.h的设计和对应的实现文件LinkList_cpp.cpp的内容,探讨了测试框架的应用。

测试框架

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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值