#include <QtCore/QCoreApplication> #include<iostream>
using namespace std;
typedef struct node //定义一个结构体,在c++中也是一个类
{
int val;
struct node* pNext;
}NODE,*PNODE;
//NODE == struct node 定义一个新的接点
//PNODE == struct node* 定义一个指向这个接点的指针
class MyList //创建一个类
{
private:
PNODE pHead;//struct node* pHead
public:
MyList() //构造函数,构造一个空链表头指针
{
this->pHead = NULL;
}
~MyList() //析构函数
{
while(this->pHead!=NULL)
{
PNODE pTemp = pHead->pNext;
delete pHead;
pHead = pTemp;
}
}
void Init() //初始化链表
{
int a;
char ans;
PNODE pTail,pNew;
do
{
cout<<"请输入一个节点值:";
cin>>a;
if(pHead == NULL)//判断链表中是否有元素(是否是空链表)
{
pHead = new NODE;
pHead->val = a;
pHead->pNext = NULL;
pTail = pHead;
}
else
{
pTail = pHead;
while(pTail->pNext!=NULL)//把pTail移动到尾部
{
pTail = pTail->pNext;
}
pNew = new NODE;//new一个新的接点来接受新输入的值
pNew->val = a;
pNew->pNext = NULL;
pTail->pNext = pNew;
pTail = pTail->pNext;
}
cout<<"继续吗?(Y/N): ";
cin>>ans;
}while(ans=='Y'||ans=='y');
}
void Add(int val) //向链表中追加值方法
{
if(pHead == NULL)
{
pHead = new NODE;
pHead->val = val;
pHead->pNext = NULL;
}
else
{
PNODE pTemp = pHead;
while(pTemp->pNext!=NULL)
{
pTemp = pTemp->pNext;
}
PNODE pNew = new NODE;
pNew->val = val;
pNew->pNext = NULL;
pTemp->pNext = pNew;
}
}
int DelAt(int k) //删除链表中的元素的方法
{
PNODE p1,p2,pTemp;
if(pHead == NULL)
{
return -1;
}
if(k<0 || k>this->GetNodeCnt()-1)
{
return -1;
}
if(this->GetNodeCnt() == 1)
{
delete pHead;
pHead = NULL;
return 0;
}
if(k==0)
{
pTemp = pHead;
pHead = pTemp->pNext;
delete pTemp;
return 0;
}
if(k == this->GetNodeCnt()-1)
{
PNODE p,pTemp;
p = pHead;
while(p->pNext->pNext!=NULL)
{
p = p->pNext;
}
pTemp = p->pNext;
p->pNext = NULL;
delete pTemp;
return 0;
}
p1 = pHead;
int i=0;
while(i<k-1)
{
p1 = p1->pNext;
i++;
}
pTemp = p1->pNext;
p2 = p1->pNext->pNext;
p1->pNext = p2;
delete pTemp;
return 0;
}
int InsertAt(int val,int k)//向链表中插入元素,约定在k之前插入
{
PNODE p1,p2,pNew,pTemp;
if(pHead == NULL)//链表为空
{
return -1;
}
if(k<0 || k>this->GetNodeCnt()-1)//k越界
{
return -1;
}
if(k==0)//在头节点之前插入
{
pTemp = pHead;
pNew = new NODE;
pNew->val = val;
pNew->pNext = NULL;
pHead = pNew;
pNew->pNext = pTemp;
return 0;
}
p1 = pHead;
int i =0;
while(i<k-1)
{
p1 = p1->pNext;
i++;
}
p2 = p1->pNext;
pNew = new NODE;
pNew->val = val;
pNew->pNext = NULL;
p1->pNext = pNew;
pNew->pNext = p2;
return 0;
}
int Find(int val) //按输入的值查找方法
{
int i=0;
PNODE pTemp = pHead;
while(pTemp != NULL)
{
if(pTemp->val == val)
{
return i;
}
pTemp = pTemp->pNext;
i++;
}
return -1;
}
void Travel() //遍历单链表中的元素
{
PNODE pTemp = this->pHead;
while(pTemp!=NULL)
{
cout<<pTemp->val<<" ";
pTemp = pTemp->pNext;
}
cout<<endl;
}
int GetNodeCnt() //获取单链表中元素的个数
{
int cnt=0;
PNODE pTemp = pHead;
while(pTemp!=NULL)
{
cnt++;
pTemp = pTemp->pNext;
}
return cnt;
}
void sort() //把单链表中的元素排序
{
int n = this->GetNodeCnt();
PNODE p1,p2;
for(int i=0;i<n-1;i++)
{
p1 = pHead;
for(int j=0;j<n-1-i;j++)
{
p2 = p1->pNext;
if(p1->val < p2->val)
{
int k = p1->val;
p1->val = p2->val;
p2->val = k;
}
p1 = p1->pNext;
}
}
}
};
//测试主函数
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
MyList list;
for(int i=0;i<10;i++)
{
list.Add(i);
}
list.Travel();
list.sort();
list.Travel();
return a.exec();
}
分享到:
相关推荐
链表类 实现对不同数据的链表操作 数据可以是数 还可以是对象 结构体等等 排序插入可以继承类后加个重载比较运算符进行操作
链表操作程序(完整)C语言.txt链表操作程序(完整)C语言.txt
使用的Java语言和JavaFX库编写的链表操作演示程序源码,对于链表的几个基本操作都具有演示动画,且数据可数据产生,也可以随机产生
链表操作的动态演示.是Timer事件的一个极好的应用。
数据结构课设基于QT的链表操作演示系统源码+实验报告.zip数据结构课设基于QT的链表操作演示系统源码+实验报告.zip数据结构课设基于QT的链表操作演示系统源码+实验报告.zip数据结构课设基于QT的链表操作演示系统源码+...
C语言链表的应用,包括建立链表、删除链表、插入/删除元素操作
写更多的代码,用更多的指针, 用更多的指针,写更多的代码, C语言编程,我还是要用链表。
内有很多链表操作,是我做课设的时候写的,c的初学者可以看看我的代码,还是有一点帮助的
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目...基于QT的链表操作演示系统源码+项目说明(数据结构课程设计).zip
单向链表所有操作的c语言实现,代码经过在Linux下测试。在Windows下应该也没问题
C++课程作业-基于Qt实现的链表操作演示系统源码(含详细注释+报告).zip 1.1 题目 分别以单链表、循环链表、双向链表为例,实现线性表的建立、插入、删除、查找等基 本操作。 要求:能够把建立、插入、删除等基本操作...
链表操作 检测字母数目 容易理解 非常好的
用模板实现链表的建立删除等操作,可以根据具体情况稍作修改即可实现链表操作,或直接使用,我在链表的学习和类模板的学习和以后的编程时这种链表构造思想觉得挺好的,有点面向对象的意思……粗浅的理解呵呵!
c++模板实现双向链表操作如逆序建立双向链表,插入结点等。
链表操作及多项式,主要是实现多项式,既有代码,又有实验报告,使用C语言编写的
使用链表管理学生信息(简),包括插入、删除、追加、反转(反置)、排序、保存到文件、从文件读取
数据结构线性链表操作 链表结点的增添 删除
大连理工 数据结构上机 链表操作
数据结构——链表操作合集,大部分链表操作都在这里了