#include<iostream>
#include<malloc.h>
#include<stddef.h>
using namespace std;
class Node//创建一个节点
{
public:
int Data;
Node* pNext;
};
Node* HeadNode(void);//创建头节点 无实际意义
void Node_list(Node* pHead);//把节点之间相连
bool insert(Node* pHead, int pose, int val);//插入一个节点
bool delNode(Node* pHead, int pose);//删除一个节点
void sortNode(Node* pHead);// 把链表排序
bool traverse(Node* pHead);//遍历链表
int lenth(Node*pHead);//求链表长度
bool desNode(Node* pHead);//删除整个链表
bool desNode(Node* pHead)
{
free(pHead);
pHead=NULL;
cout<<"链表已全部删除";
}
int lenth(Node* pHead)
{
Node* p=pHead;
int cnt=0;
while(p->pNext!=NULL)
{
cnt++;
p=p->pNext;
}
return cnt;
}
bool delNode(Node* pHead, int pose)
{
Node* p=NULL;
Node* q=NULL;
int i;
int len;
len=lenth(pHead);
if(pose<1||pose>len)
{
cout<<"删除失败"<<endl;
return false;
}
for(i=1,p=pHead->pNext,q=pHead;i<len+1;i++,p=p->pNext,q=q->pNext)
{
if(i==pose||p->pNext==NULL)
{
q->pNext=p->pNext;
cout<<"已成功删除:"<<p->Data<<endl;
free(p);
return true;
}
}
}
bool insert(Node* pHead, int pose, int val)
{
Node* p=NULL;
int i;
int len;
len=lenth(pHead);
if(pose<1||pose>len)
return false;
for(i=1,p=pHead->pNext;i<=len;i++,p=p->pNext)
{
if(i==pose)
{
Node* pNew=(Node*)malloc(sizeof(Node));
pNew->Data=val;
pNew->pNext=NULL;
if(p->pNext!=NULL)
{
pNew->pNext=p->pNext;
p->pNext=pNew;
}
else p->pNext=pNew;
return true;
}
}
}
bool traverse(Node* pHead)
{
Node* pNode=pHead;
while(pNode->pNext!=NULL)
{
pNode=pNode->pNext;
cout<<pNode->Data<<endl;
}
}
Node* HeadNode(void)
{
Node* pHead;
pHead = (Node*)malloc(sizeof(Node));
return pHead;
}
void Node_list(Node* pHead)
{
int cnt = 0;
int data = 0;
Node* p = pHead;
printf("请书你想要创建的节点个数:");
cin >> cnt;//要把它的地址给它采纳存放
if(cnt<1)
{
cout<<"请输入有效数字:"<<endl;
fflush(stdin);
cin>>cnt;
}
for (int i = 1; i < cnt + 1; i++)
{
printf("请输入%d的数据值:", i);
cin >> data;
Node* pNew = (Node*)malloc(sizeof(Node));//新的
p->pNext = pNew;
pNew->Data=data;
pNew->pNext=NULL;
p = p->pNext;
}
}
void sortNode(Node* pHead)
{
int i,temp,j,len;
len=lenth(pHead);
Node*p=NULL;
Node*q=NULL;
for(i=1,p=pHead->pNext;i<len;i++,p=p->pNext)
{
for(j=i+1,q=p->pNext;j<len+1;j++,q=q->pNext)
{
if(p->Data>q->Data)
{
temp=p->Data;
p->Data=q->Data;
q->Data=temp;
}
}
}
cout<<"排序完成"<<endl;
traverse(pHead);
}
int main(void)
{
Node* pHead = NULL;
pHead = HeadNode();
if(pHead==NULL)
{
cout<<"链表创建失败";
exit(-1);
}
Node_list(pHead);
traverse(pHead);
int val,pose;
int delpose;
cout<<"请输入你要插入的位置与数据:";
cin>>pose>>val;
if(insert(pHead,pose,val))
cout<<"插入成功"<<endl;
else cout<<"插入失败"<<endl;
traverse(pHead);
/*cout<<"请输入你要删除的位置:";
cin>>delpose;
delNode(pHead,delpose);
traverse(pHead);
*/
sortNode(pHead);
return 0;
}
利用类创建链表的增删改查
最新推荐文章于 2024-08-08 17:12:48 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)