C++ 模板循环链表练习
初学C++ 刚看了模板的视频,自己把以前写的一个循环链表改成模板,添加的节点的那个函数死活编不过去,求大神帮看看
#include <iostream>
#include <cstring>//memset
using namespace std;
template<typename T>
struct Node
{
T List_data;
Node *List_pPre;
Node *List_pNext;
};
template<typename T>
Node<T>* NewHead(const T data)
{
Node<T>* listHead = new Node<T>;
memset(listHead,0,sizeof(Node<T>));
listHead->List_data = data;
listHead->List_pNext = listHead;
listHead->List_pPre = listHead;
return listHead;
}
template<typename T>
void AddNod(Node<T>* listHead,const T data)
{
Node<T>* ptemp = listHead;
while(ptemp->List_pNext != listHead)
{
ptemp = ptemp->List_pNext;
}
Node<T>* m_Node = new Node<T>;
memset(m_Node,0,sizeof(Node<T>));
m_Node->List_data = data;
m_Node->List_pNext = listHead;
m_Node->List_pPre = ptemp;
ptemp->List_pNext = m_Node;
listHead->List_pPre = m_Node;
cout << "add data = " << data << " success!" << endl;
}
template<typename T>
void ListDis(const Node<T>* listHead)
{
Node<T>* ptemp = listHead->List_pNext;
int i = 1;
cout << "head" << " = " << listHead->List_data << endl;
while(ptemp!= listHead)
{
cout << "Node" << i << " = " << ptemp->List_data << endl;
ptemp = ptemp->List_pNext;
i++;
}
}
//加入a个节点后最多只能删a个节点,不能删除头节点
template<typename T>
void List_Delete_Node(Node<T>* listHead,T nNode)
{
int m_count = 0;
Node<T>* ptemp = listHead;
while(ptemp->List_pNext != listHead)
{
m_count++;
ptemp = ptemp->List_pNext;
}
if(0 >= nNode || m_count < nNode)
{
cout << "delete error!" << endl;
return;
}
ptemp = listHead;
m_count = nNode;
while(m_count != 0)
{
m_count--;
ptemp = ptemp->List_pNext;
}
ptemp->List_pNext->List_pPre = ptemp->List_pPre;
ptemp->List_pPre->List_pNext = ptemp->List_pNext;
delete ptemp;
cout << "delete Node " << nNode << "success!" << endl;
}
template<typename T>
void List_Delete_All(Node<T>* listHead)
{
Node<T>* ptemp = listHead;
while(ptemp->List_pNext != listHead)
{
ptemp = ptemp->List_pNext;
delete ptemp->List_pPre;
}
delete ptemp;
cout << "delete all list success!" << endl;
}
int main()
{
Node<int>* listHead;
listHead = NewHead(0);
AddNode(listHead,6); //E:\main.cpp:111: error: 'AddNode' was not declared in this scope
AddNode(listHead,a);
AddNode(listHead,9);
AddNode(listHead,10);
AddNode(listHead,11);
AddNode(listHead,12);
cout << "---------------------" << endl;
ListDis(listHead);
cout << "---------------------" << endl;
List_Delete_Node(listHead,2);
ListDis(listHead);
cout << "---------------------" << endl;
List_Delete_Node(listHead,2);
ListDis(listHead);
cout << "---------------------" << endl;
List_Delete_All(listHead);
return 0;
}
...全文
相关推荐
排序、链表、树、C++模板代码
模板元编程是模板使用的一个高级形式,它在编译时执行计算,进一步增强了C++的抽象能力。在压缩包文件"cpp"中,可能包含了用C++实现的排序算法、链表操作、树结构以及模板代码示例。
cpp代码-List8Simaliar JuZhen
标题“cpp代码-List8Simaliar JuZhen”表明这是一个关于C++编程语言的项目,可能涉及到数据结构、算法或者特定的编程练习。
手写代码必备手册—面试必须
在这个过程中,通过大量的练习和模仿经典的代码,程序员可以提升自己的编码技能和对算法的理解。首先,手写代码通常需要使用较为简单的编程语言和工具,比如纯C++搭配标准模板库(STL)。
数据结构与算法分析C++语言描述第四版参考答案
C++编程:此书使用C++语言作为实现数据结构和算法的工具,涵盖了C++的基础知识,如类、对象、模板、STL(标准模板库)、智能指针、异常处理等。
cs_kaoyan:王道考研书上代码整合
通过实际编程练习,考生将能够更好地运用理论知识,提升编程能力,为考研做好充分准备。


