版权声明:未经博主允许请勿转载 https://blog.csdn.net/hlz_12345/article/details/83757987
#include <iostream>
typedef int Rank;
struct Node
{
int data;
Node* pnode;
};
class mylist
{
private:
int size;
Node header;
public:
mylist() { size = 0; header.data = NULL; header.pnode = NULL; }
bool insertasfirst(int elem); //作为首节点插入
bool removefirst(); //删除首节点
bool insertaslast(int elem); //作为尾节点插入
bool removelast(); //删除尾节点
bool insert(Rank r, int elem); //在秩为r的位置插入
void clear();
void show();
~mylist() { clear(); };
};
bool mylist::insertasfirst(int elem)
{
if (size == 0)
{
header.pnode = new Node;
header.pnode->data = elem;
header.pnode->pnode = NULL;
size++;
return true;
}
else if (size >0)
{
Node* oldnode = header.pnode;
header.pnode = new Node;
header.pnode->data = elem;
header.pnode->pnode = oldnode;
size++;
return true;
}
else return false;
}
bool mylist::removefirst()
{
if (header.pnode != NULL)
{
Node* temp = header.pnode;
if (header.pnode->pnode)
header.pnode = header.pnode->pnode;
else
header.pnode = NULL;
delete temp;
size -- ;
return true;
}
else return false;
}
void mylist::show()
{
if (size == 0)
{
std::cout << "there is no Node";
return;
}
Node* p = header.pnode;
for (int i = 0; i < size; i++)
{
std::cout << p->data << " ";
if(p->pnode)
p = p->pnode;
}
}
void mylist::clear()
{
if (size == 0) return;
while (header.pnode->pnode != NULL)
{
Node* temp = header.pnode;
header.pnode = header.pnode->pnode;
delete temp;
size--;
}
delete header.pnode;
header.pnode = NULL;
size--;
}
bool mylist::insertaslast(int elem)
{
if (size == 0)
{
header.pnode = new Node;
header.pnode->data = elem;
header.pnode->pnode = NULL;
size++;
return true;
}
Node*temp = &header;
while (temp->pnode != NULL)
{
temp = temp->pnode;
}
temp->pnode = new Node;
temp->pnode->data = elem;
temp->pnode->pnode = NULL;
size++;
return true;
}
bool mylist::removelast()
{
if (size == 0) return false;
Node* temp = header.pnode;
Node* header_pnode=header.pnode;
while (header.pnode->pnode != NULL)
{
temp = header.pnode;
header.pnode = header.pnode->pnode;
}
temp->pnode = NULL;
delete header.pnode;
header.pnode = header_pnode;
size--;
return true;
}
bool mylist::insert(Rank r, int elem)
{
if (r < 0 || r >size) return false;
Node* pred = header.pnode;
Node* header_pnode = header.pnode;
for (int i = 0; i < r; i++)
{
pred = header.pnode;
header.pnode = header.pnode->pnode;
}
pred->pnode = new Node;
pred->pnode->data = elem;
pred->pnode->pnode = header.pnode;
header.pnode = header_pnode;
size++;
return true;
}