本人最近在练习数据结构与算法,对链表的相关操作进行了学习,其中包括
链表的初始化
单链表的头插法创建方法
单链表的尾插法创建方法
单链表中单个元素的删除
单链表的释放
单链表的打印
在后面会把自己编写的相关代码贴在后面,与大家分享,相互交流,共同提高!希望自己的代码能对看到此文的人有所帮助。
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int ElemType;
//构建结构体
typedef struct node{
ElemType data;
struct node* next;
}NODE,*PNODE;
//初始化链表
NODE *initnode();
//单链表的建立1,头插法建立链表
NODE *HeadCreatList();
//单链表的建立2,尾插法建立链表
NODE *TailCreatList();
//删除链表中的指定元素
NODE *DelList(NODE *phead,int data);
//释放链表
NODE *ClearList(NODE *phead);
//打印链表
void Print(NODE *phead);
int main()
{
cout<<"***********************************************"<<endl;
cout<<"***********************************************"<<endl;
cout<<"****** 0 退出 *************"<<endl;
cout<<"****** 1 头插法创建链表 *************"<<endl;
cout<<"****** 2 尾插法创建链表 *************"<<endl;
cout<<"****** 3 删除指定的元素 *************"<<endl;
cout<<"****** 4 打印链表 *************"<<endl;
cout<<"****** 5 释放链表 *************"<<endl;
cout<<"***********************************************"<<endl;
cout<<"***********************************************"<<endl;
cout<<"请根据以上提示输入数字:";
NODE *phead;
ElemType data;
int set;
cin>>set;
while(set)
{
if(1 == set)
phead = HeadCreatList();
else if(2 == set)
phead = TailCreatList();
else if(3 == set)
{
cout<<"输入你要删除的元素:";
cin>>data;
phead = DelList(phead,data);
}
else if(4 == set)
Print(phead);
else if(5 == set)
phead = ClearList(phead);
cin>>set;
}
return 0;
}
//初始化链表
NODE *initnode()
{
NODE *L = (NODE *)malloc(sizeof(NODE)); //申请节点空间
if(NULL == L)
cout<<"内存空间申请失败!"<<endl;
L->next = NULL;
}
//单链表的建立1,头插法建立链表
NODE *HeadCreatList()
{
cout<<endl<<"用头插法建立链表,请依次输入链表元素,每输入一个元素需按“enter(回车)”键,输入“-1”结束输入"<<endl;
NODE *L = (NODE *)malloc(sizeof(NODE)); //初始化节点
L->next = NULL;
ElemType x;
cin>>x;
while(x != -1)
{
NODE *p = (NODE *)malloc(sizeof(NODE)); //申请新的节点
p->data = x;
p->next = L->next;
L->next = p;
cin>>x;
}
cout<<"头插法建立链表成功!输入“4”可打印查看!"<<endl;
return L;
}
//单链表的建立2,尾插法建立链表
NODE *TailCreatList()
{
NODE *L = (NODE *)malloc(sizeof(NODE)); //初始化新节点
L->next = NULL;
NODE *ptemp = L;
cout<<endl<<"用尾插法建立链表,请依次输入链表元素,每输入一个元素需按“enter(回车)”键,输入“-1”结束输入"<<endl;
ElemType x;
cin>>x;
while(-1 != x)
{
NODE *p = (NODE *)malloc(sizeof(NODE)); //申请新节点
p->data = x;
p->next = NULL;
ptemp->next = p;
ptemp = ptemp->next;
cin>>x;
}
cout<<"尾插法建立链表成功!输入“4”可打印查看!"<<endl;
return L;
}
//删除链表中的指定元素
NODE *DelList(NODE *phead,int data)
{
NODE *ptemp = phead; //新建节点,以对链表进行操作
NODE *pt; //中间操作节点
if(NULL == ptemp->next)
cout<<"此链表为空无法进行删除操作"<<endl;
else if(data == ptemp->next->data) //假如要删除的元素在第一个位置
{
pt = ptemp->next;
phead->next = ptemp->next->next;
free(pt);
}
else //不在第一个位置,进行查找
{
while(NULL != ptemp->next->next && ptemp->next->next->data != data)
{
ptemp = ptemp->next;
}
//未找到
if(NULL == ptemp->next->next)
{
cout<<"在链表中未找到这个元素!删除失败,原链表为"<<endl;
}
//如果是最后一个元素
else if(NULL == ptemp->next->next->next && ptemp->next->data == data)
{
pt = ptemp->next->next;
free(pt);
ptemp->next->next = NULL;
cout<<"尾插法建立链表成功!输入“4”可打印查看!"<<endl;
}
else//如果在中间
{
pt = ptemp->next->next;
ptemp->next->next = ptemp->next->next->next;
free(pt);
cout<<"尾插法建立链表成功!输入“4”可打印查看!"<<endl;
}
}
return phead;
}
//释放链表
NODE *ClearList(NODE *phead)
{
NODE *ptemp;
if(NULL == phead->next)
cout<<"此链表为空,无需释放"<<endl;
else
{
while(phead->next != NULL)
{
ptemp = phead->next;
phead->next = ptemp->next;
free(ptemp);
}
cout<<"链表释放成功!"<<endl;
}
return phead;
}
//打印链表
void Print(NODE *phead)
{
NODE *ptemp;
ptemp = phead;
if(NULL == ptemp->next)
cout<<"链表为空"<<endl;
while(NULL != ptemp->next)
{
cout<<ptemp->next->data<<" ";
ptemp = ptemp->next;
}
cout<<endl<<"打印完毕"<<endl;
}
本文可免费转载,转载请注明出处。http://blog.csdn.net/qq_37949021/article/details/79617035