单链表的带头结点的初始化、创建、插入删除和销毁
欢迎大家与我沟通交流QQ845264718
#include<iostream>
using namespace std;
#define OK 0
#define ERROR -1
//#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
//1.设计节点
typedef struct node
{
ElemType elem;
struct node* next;
}Node,*Linknode;
//2.初始化(带头结点的)
Status InitLinklist(Linknode L)
{
L = (Linknode)malloc(sizeof(node));
if (!L)
return ERROR;
L->next = NULL;
L->elem = 0;
return OK;
}
//3.创建一个节点
Linknode New_node(ElemType elem)
{
Linknode New = (Linknode)malloc(sizeof(node));
if (!New)
exit(OVERFLOW);
New->next = NULL;
New->elem = elem;
return New;
}
//4.创建一条链表(尾插创建)
void CreateLinkList(Linknode L)
{
Linknode tail=L;
cout << "输入你要创建的链表个数" << endl;
int n;
cin >> n;
for (int i = 1;i <= n;i++)
{
Linknode New = New_node(i);
tail->next = New;
tail = tail->next;
}
}
//5.头插法
void add_head_Linklist(Linknode L, ElemType e)
{
Linknode New = New_node(e);
New->next = L->next;
L->next = New;
}
//6.尾插法
void add_tail_Linklist(Linknode L, ElemType e)
{
Linknode tail = L;
Linknode New = New_node(e);
while (tail->next != NULL)
{
tail = tail->next;
}
tail->next = New;
}
//7.链表的删除
Status delLinkList(Linknode L, int i, ElemType *e)
{
Linknode q,p = L;
int j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!(p->next) || j > i)
return ERROR;
q = p->next;
p->next = q->next;
*e = q->elem;
free(q);
return OK;
}
//8.链表的插入
Status addLinkList(Linknode L, int i, ElemType e)
{
Linknode New = New_node(e);
Linknode p = L;
int j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p || j > i)
return ERROR;
New->next = p->next;
p->next = New;
return OK;
}
//9.删除整个链表
Status ClearLinkList(Linknode L)
{
Linknode p, q;
p = L->next;
while (!p)
{
q = p->next;
free(p);
p = q;
}
L->next = NULL;
return OK;
}
//打印链表
void show(Linknode L)
{
if (L->next == NULL)
cout<<"链表为空"<<endl;
Linknode p = L->next;
while (p != NULL)
{
cout << p->elem << "\t";
p = p->next;
}
cout << endl;
}
int main()
{
int e=0;
node L;
InitLinklist(&L);
CreateLinkList(&L);
show(&L);
/*add_head_LinkList(&L, 11111);
show(&L);
add_tail_LinkList(&L, 9999);
show(&L);*/
//addLinkList(&L, 8, 888888);
/*delLinkList(&L, 6, &e);
cout << e << endl;*/
ClearLinkList(&L);
show(&L);
}