《数据结构》这门课实验报告要求做双向链表,但是我连双向链表都难以创建,我使用的是VS2019版本
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#define STUDENT ElemnetType
#define Hdata HType
class STUDENT
{
public:
char name[20];
char num[10];
char sex[3];
int age;
char place[30];
};
class Hdata
{
public:
int l = 0;
};
template<typename ElementType>
class DoubleChainNode
{
public:
STUDENT data;
DoubleChainNode<ElementType>* prelink;
DoubleChainNode<ElementType>* nextlink;
};
template<typename HeadType>
class DoubleHeadNode
{
public:
HeadType Hdata;
DoubleHeadNode<HeadType>* first;
};
template<typename HeadType,typename ElementType>
class DoubleChainList
{
public:
DoubleChainList();
~DoubleChainList();
bool InsertElementDoubleChainList(int k, ElementType& newvalue);
private:
DoubleHeadNode<HeadType>* HeadPtr;
};
template<typename HeadType, typename ElementType>
DoubleChainList<HeadType, ElementType>::DoubleChainList()
{
HeadPtr = new DoubleHeadNode<HeadType>;
HeadPtr->first = NULL;
}
template<typename HeadType, typename ElementType>
DoubleChainList<HeadType, ElementType>::~DoubleChainList()
{
DoubleChainNode<ElementType>* current;
current = HeadPtr->first;
while (HeadPtr->first)
{
current = current->nextlink;
delete HeadPtr->first;
HeadPtr->first = current;
}
delete HeadPtr;
}
template<typename HeadType, typename ElementType>
bool DoubleChainList<HeadType, ElementType>::
InsertElementDoubleChainList(int k, ElementType& newvalue)
{
if (k < 0)
return false;
int index = 1;
DoubleChainNode<ElementType>* current = HeadPtr->first;
while (index < k && current);
{
current = current->nextlink;
index++;
}
if (k > 0 && !current)
return false;
DoubleChainNode<ElementType>* q = new DoubleChainNode<ElementType>;
if (k)
{
q->nextlink = current->nextlink;
q->prelink = current;
DoubleChainNode<ElementType>* p = current->nextlink;
if (p)
{
p->prelink = q;
current->nextlink = q;
}
}
else
{
q->nextlink = HeadPtr->first;
q->prelink = NULL;
DoubleChainNode<ElementType>* p = HeadPtr->first;
if (p)
{
p->prelink = q;
HeadPtr->first = q;
}
return true;
}
}
int main()
{
ElemnetType newvalue;
char name[][20] = { " ","Tom" ,"Amy"};
char num[][10] = { " ","202101" ,"202102"};
char sex[][3] = { " ","男" ,"女"};
char place[][30] = { " ","England" ,"Amercia"};
int age[] = {0,10,9};
DoubleChainList<HType,ElemnetType> FirstList;
for (int i = 2; i >= 1; i--)
{
strcpy(newvalue.name, name[i]);
strcpy(newvalue.num, num[i]);
strcpy(newvalue.sex, sex[i]);
strcpy(newvalue.place, place[i]);
newvalue.age = age[i];
FirstList.InsertElementDoubleChainList(i, newvalue);
}
while (true)
{
cout << "双向链表创建成功!" << endl;
}
所有的指针转换的地方都会出现标题所给的问题
根据CSDN上给的C2440的一般解决方法试了,但是我觉得不对
成功按照我写的代码实现双向链表的创建,并将输入的信息成功插入