双向链表

我的梦境 提交于 2020-02-04 07:06:51

#include
#include
using namespace std;
typedef struct List {
int date;
struct List next;
struct List
front;
}List;
void Init_List(List &Head)//创建双向链表头
{
Head = (List
)malloc(sizeof(List));
if (Head == NULL)
return;
Head->date = NULL;
Head->front = NULL;
Head->next = NULL;
}
void Set_List(List* &Head,int length)//创建链表
{
if (Head == NULL)
return;
for (int i = 0;i < length;i++)
{
List tmp = (List)malloc(sizeof(List));
if (tmp == NULL)
return;
if (Head->next == NULL)
{
tmp->date = i;
tmp->next = Head->next;
Head->next = tmp;
tmp->front = Head;
}
else {
tmp->date = i;
tmp->next = Head->next;
Head->next->front = tmp;
tmp->front = Head;
Head->next = tmp;
}
}
}
int List_Size(List* &Head)//链表长度
{
int count = 0;
if (Head == NULL)
return 0;
if (Head->next == NULL)
return 0;
List* p = Head->next;
while §
{
count++;
p = p->next;
}
return count;
}
void Look_List(List Head)//遍历链表
{
if (Head == NULL)
return;
if (Head->next == NULL)
return;
List
p = Head->next;
while §
{
std::cout << p->date << " ";
p = p->next;
}
}
void Insert(List Head ,int c,int Node)//插入元素
{
if (Head == NULL)
return;
if (Node > List_Size(Head))
return;
List
tmp = (List*)malloc(sizeof(List));
if (tmp == NULL)
return;
List* p = Head;
if (p->next == NULL)
{
tmp->date = c;
tmp->front = p;
tmp->next = p->next;
p->next = tmp;
return;
}
for (int i = 1;i < Node;i++)
{
p = p->next;
}
if (p->next == NULL)
{
tmp->date = c;
tmp->next = p->next;
tmp->front = p;
p->next = tmp;
}
else
{
tmp->date = c;
tmp->front = p;
tmp->next = p->next;
p->next->front = tmp;
p->next = tmp;
}

}
void Delete(List* Head,int Node)//删除元素
{
if (Head == NULL)
return;
if (Node > List_Size(Head))
return;
List* p = Head;
for (int i = 1;i < Node;i++)
{
p = p->next;
}
if (p->next == NULL)
{
p->front->next = NULL;
free§;
}
else
{
p->front->next = p->next;
p->next->front = p->front;
free§;
}
}
int main()
{
List *Head;
Init_List(Head);
int length = 0;
std::cout << "请输入链表长度: ";
cin >> length;
cin.clear();
Set_List(Head, length);
int c;
std::cout << "请输入你要插入的数据值: ";
cin >> c;
cin.clear();
int Node;
std::cout << "请输入你要插入数据的位置: ";
cin >> Node;
cin.clear();
Insert(Head,c,Node);
std::cout << List_Size(Head)<<endl;
Look_List(Head);
int Node1;
std::cout <<endl<< "请输入您要删除的节点: ";
cin >> Node1;
Delete(Head,Node1);
std::cout << List_Size(Head) << endl;
Look_List(Head);
return 0;
}
//本文初学者原创,如有问题,请各位大佬指出,谢谢各位大佬的指导

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!