C++建立链表和插入删除! 实在是学不懂。。尤其是 怎么建立一个单链表。。求教!
书上的开头是这样的#incldue<iostream.h>typedefintElemType;structNodeType{ElemTypedata;NodeType*...
书上的开头是这样的
#incldue<iostream.h>
typedef int ElemType;
struct NodeType
{
ElemType data;
NodeType *next;
};
class LinkList
{private:
NodeType *Head;
public:
LinkList();
~LinkList();
void Creat();
void Display();
void Insert(int i,ElemType x);
ElemType Delete(int i);
};
成员函数声明好了,不知道怎么定义。。。求解!!!! 展开
#incldue<iostream.h>
typedef int ElemType;
struct NodeType
{
ElemType data;
NodeType *next;
};
class LinkList
{private:
NodeType *Head;
public:
LinkList();
~LinkList();
void Creat();
void Display();
void Insert(int i,ElemType x);
ElemType Delete(int i);
};
成员函数声明好了,不知道怎么定义。。。求解!!!! 展开
1个回答
展开全部
你要做的是 单向链表 吧,也就是只有向下查找没有向上查找的链表。
你的
void Insert(int i,ElemType x)//在i后面插入,例如i = 0;那么就是插入在1;
{
NodeType *p = Head,*pNT;
for(int x = 0;x != i;++x)//从0开始
if(p != nullptr)p = p->next;
else return;//如果i超过了范围就返回,也可抛异常,这样是没有插入的;
pNT = p->next;
p->next = new NodeType();
p->next->data = x;
p->next->next = pNT;
}
ElemType Delete(int i)
{
ElemType result;
NodeType *p = Head,*pAim = nullptr;
if(i == 0)
{
Head = Head.next;
result = p->data;
delete p;
return result;
}
for(int x = 0;x != i - 1;++x)//这里是到了要删除的前一个就停了
if(p != nullptr)p = p.next;
else throw ...;//话说你是想抛出异常还是想返回,自己定义异常吧
pAim = p.next;
p->next = pAim->next;
result = pAim->data;
delete pAim;
return result;
}
//手打的没有用编译器调试过,你大概能够了解思路了吧,就是
借助head这个头查到要操作的元素,然后操作,你自己试下,
其实不难的。
Display()就是重头查到空指针就停,一个个地都 陈列(display)出来
Create()就是把给出第0个也就是Head的具体对象吧。
如果你想一开始是空的,那么你要自己改写Insert
因为我刚才把head为nullptr的情况忽略了,Insert会把这种情况当作越界.
追问
其实我想看Creat()和Display()。。
追答
void Create()
{
if(Head == nullptr){ Head = new NodeType; Head->next = nullptr; }
//一般创建的时候是空链表的话,这样设置0号也就是查不 ead其实并没有储存数据
}
Display()
{
for(NodeType *p = Head;p != nullptr;p = p->next)
std::cout<<p->data<<std::endl;
}
这两个都比较简单都是一条语句;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询