利用类创建链表的增删改查

这篇博客介绍了如何使用C++实现链表数据结构,包括创建头节点、连接节点、插入节点、删除节点、排序链表、遍历链表以及释放整个链表的内存。通过示例代码详细展示了每个操作的过程,帮助读者理解链表操作的基本方法。
摘要由CSDN通过智能技术生成
#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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值