当前位置: 首页 > news >正文

对链表的操作代码

#include <iostream>
#include <malloc.h>

using namespace std;

typedef struct Node
{
int data;
struct Node * pNext;

}NODE , * PNODE;//NODE =struct Node,PNODE=struct Node *

/******************函数声明***********************/
PNODE create_list( );//创建链表

void travrse_list(PNODE pHead)//遍历链表


int getlength_list(PNODE pHead)//获取链表的长度


void delete_list(PNODE pHead,int val)//删除链表中某一特定元素val,比如:删除链表中数据为3的结点

void insert_list(PNODE pHead,int pos,int val)//在链表pos位置上插入val元素

void sort_list(PNODE pHead)//使用冒泡法进行排序

/******************************子函数************************************/
//创建链表
PNODE create_list( )
{
PNODE pHead,pTail;
int i=0;
int len;

pHead=(PNODE)malloc(sizeof(NODE));
if(pHead == NULL)
{
cout<<"创建链表头结点失败!"<<endl;
exit(-1);
}

pTail=pHead;
pTail->pNext=NULL;


cout<<"请输入链表的结点个数,len=";
cin>>len;

for(i=0;i<len;++i)
{
PNODE pNew=(PNODE)malloc(sizeof(NODE));

if(pNew == NULL)
{
cout<<"创建链表第"<<i+1<<"结点失败!"<<endl;
exit(-1);
}

cout<<"请输入第"<<i+1<<"结点的数据:";
cin>>pNew->data;

pTail->pNext=pNew;
pNew->pNext=NULL;
pTail=pNew;
}

return pHead;
}


//遍历链表
void travrse_list(PNODE pHead)
{
PNODE p=pHead->pNext;

if(p==NULL)
{
cout<<"所输入的链表为空,遍历链表失败!"<<endl;
return ;
}

while(p!=NULL)
{
cout<<p->data<<" ";
p=p->pNext;
}
cout<<endl;
}


//获取链表的长度
int getlength_list(PNODE pHead)
{
int len=0;

PNODE p=pHead->pNext;

if(p==NULL)
{
cout<<"所输入的链表为空,获取链表长度失败!"<<endl;
return 0;
}

while(p!=NULL)
{
++len;
p=p->pNext;
}

return len;

}

//删除链表中某一特定元素val,比如:删除链表中数据为3的结点
void delete_list(PNODE pHead,int val)
{
PNODE p1=pHead;
PNODE p2=pHead->pNext;
PNODE p3=NULL;//用来释放所删除结点

int cnt=0;
int len;

if(p2==NULL)
{
cout<<"所输入的链表为空,删除失败!"<<endl;
return ;
}

len=getlength_list(pHead);

while(p2!=NULL)
{
if(p2->data == val)
{
p3=p2;
p1->pNext=p2->pNext;
p2=p2->pNext;
free(p3);//释放所删除的结点的内存
p3=NULL;
}
else
{
++cnt;
p1=p2;
p2=p2->pNext;

}
}

if(cnt==len)
{
cout<<"链表没有您所需要删除的元素!"<<endl;
return ;
}

travrse_list(pHead);
}

//在链表pos位置上插入val元素
void insert_list(PNODE pHead,int pos,int val)
{
PNODE p1=pHead;
int i=0;
int len;

len=getlength_list(pHead);

if(pos<0||pos>len+1)
{
cout<<"无法在此位置插入元素!"<<endl;
return;
}


while(i<pos-1)
{
p1=p1->pNext;
++i;
}

PNODE p2=(PNODE)malloc(sizeof(NODE));

if(p2 == NULL)
{
cout<<"在插入元素时创建链表失败!"<<endl;
exit(-1);
}

p2->data=val;
p2->pNext=p1->pNext;
p1->pNext=p2;

return;
}

//使用冒泡法进行排序
void sort_list(PNODE pHead)
{
PNODE p1=pHead;
PNODE p2;
int i=0,j=0;
int len;
int t;

len=getlength_list(pHead);

for(i=0,p1=pHead->pNext;i<len-1;++i,p1=p1->pNext)
for(j=i+1,p2=p1->pNext;j<len;++j,p2=p2->pNext)
{
if(p1->data>p2->data)
{
t=p1->data;
p1->data=p2->data;
p2->data=t;
}
}


}
/******************************主函数************************************/
int main(void)
{
PNODE list1;
int cnt;

list1=create_list();
travrse_list(list1);
//delete_list(list1,2);
cnt=getlength_list(list1);
cout<<"链表的长度为:"<<cnt<<endl;
insert_list(list1,4,9);
travrse_list(list1);
sort_list(list1);
travrse_list(list1);
return 0;
}

 

转载于:https://www.cnblogs.com/kuoyan/p/3680736.html

相关文章:

  • Asp.Net MVC 模型(使用LINQ to SQL创建Model类)2
  • MVC 构造新Model实现内容搜索
  • Ruby:Net::HTTP
  • 不错的JS
  • 关于ADO.NET连接SQL一些方法
  • 设计模式--职责链(学习)
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • php统计在线人数,精确的统计在线人数的办法
  • 世界货币符号大全
  • 《每日一博》——学习
  • WhyDX9:翻写D3D红龙书中的程序
  • hive行转多列LATERAL VIEW explode
  • POJ-1182-食物链 解题报告
  • 关于WCF开发 相应流程注意事项
  • asp.net mvc部署
  • CEF与代理
  • DOM的那些事
  • Java 内存分配及垃圾回收机制初探
  • magento 货币换算
  • Median of Two Sorted Arrays
  • Meteor的表单提交:Form
  • node.js
  • overflow: hidden IE7无效
  • Protobuf3语言指南
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SQLServer之创建显式事务
  • Vue UI框架库开发介绍
  • 搞机器学习要哪些技能
  • 关于for循环的简单归纳
  • 驱动程序原理
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  •  一套莫尔斯电报听写、翻译系统
  • ionic入门之数据绑定显示-1
  • Java性能优化之JVM GC(垃圾回收机制)
  • Mac 上flink的安装与启动
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • (33)STM32——485实验笔记
  • (4)事件处理——(7)简单事件(Simple events)
  • (第61天)多租户架构(CDB/PDB)
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (十一)手动添加用户和文件的特殊权限
  • (四) 虚拟摄像头vivi体验
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .net core 依赖注入的基本用发
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .netcore如何运行环境安装到Linux服务器
  • .NET连接数据库方式
  • .net中调用windows performance记录性能信息
  • @Bean注解详解
  • @JsonSerialize注解的使用
  • [20150904]exp slow.txt
  • [c语言]小课堂 day2
  • [JS]JavaScript 注释 输入输出语句
  • [LeetCode]Max Points on a Line