C语言链表总结(创建,排序,增加,删除)
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE
{
int data ;
struct NODE * pNext ;
} * PNODE , NODE ;
PNODE create_list(void) ;
void traverse_list(PNODE phead);
int length_list(PNODE pHead) ;
void sort_list(PNODE pHead);
bool insert_list(PNODE phead,int Pos,int val);
bool delete_list(PNODE phead,int Pos,int * val);
int main()
{
PNODE pHead = NULL ;
pHead =create_list();
traverse_list(pHead);
printf("链表的长度是:%d\n",length_list(pHead) );
// sort_list(pHead);
// traverse_list(pHead);
int add ;
add=12 ;
if(insert_list(pHead,5,add) )//在第Pos个结点前面插入一个新的结点
{
printf("您增加的结点成功,值为%d\n",add) ;
traverse_list(pHead);
}
else printf("结点为空!\n") ;
int val ;
if(delete_list(pHead,5,&val) )
{
printf("您删除的结点成功,值为%d\n",val);
traverse_list(pHead);
}
else printf("删除的结点为空!\n") ;
}
PNODE create_list(void)
{
int val;
int len;
int i ;
printf("请输入您需要的结点个数:");
scanf("%d",&len);
PNODE phead = (PNODE)malloc(sizeof(NODE)) ;
if(phead ==NULL)
{
printf("动态分配内存失败!");
exit(-1);
}
PNODE pTail =phead ;
pTail->pNext = NULL ;
for(i=0;i<len;i++)
{
PNODE pNew = (PNODE)malloc(sizeof(NODE)) ;
if(pNew ==NULL)
{
printf("动态分配内存失败!");
exit(-1);
}
printf("请输入第%d个结点的值:",i+1);
scanf("%d",&val);
pNew->data = val ;
pTail->pNext=pNew ;
pNew->pNext=NULL ;
pTail = pNew ;
}
return phead ;
}
void traverse_list(PNODE phead)
{
PNODE p = phead->pNext ;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->pNext ;
}
printf("\n");
}
int length_list(PNODE phead)
{
int len = 0 ;
PNODE p = phead->pNext ;
while(p!=NULL)
{
len++ ;
p=p->pNext ;
}
return len ;
}
void sort_list(PNODE phead)
{
int i,j,temp,len;
len = length_list(phead);
PNODE p = NULL ;
for(i=0;i<len-1;i++)
{
for(j=0,p=phead->pNext;j<len-i-1;j++,p=p->pNext)
{
if(p->data>p->pNext->data)
{
temp = p->data;
p->data=p->pNext->data;
p->pNext->data = temp ;
}
}
}
}
bool insert_list(PNODE phead,int Pos,int val) //是在第Pos个结点前面插入一个新的结点
{
int i=0;
PNODE p=phead;
while(p!=NULL && i<Pos-1)
{
p=p->pNext;
i++ ;
}
if(p==NULL && i>Pos-1)
return false ;
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(pNew ==NULL)
{
printf("动态分配失败!");
exit(-1);
}
pNew->data = val ;
PNODE q = p->pNext ;
p->pNext = pNew ;
pNew->pNext =q ;
return true ;
}
bool delete_list(PNODE phead,int Pos,int *val)
{
int i=0;
PNODE p =phead ;
while(p->pNext!=NULL && i<Pos-1)
{
p=p->pNext ;
i++;
}
if(p->pNext == NULL && i>Pos-1)
return false ;
PNODE q = p->pNext ;
*val = q->data ;
p->pNext =p->pNext->pNext ;
free(q);
q=NULL ;
}
C语言链表总结(创建,排序,增加,删除)的更多相关文章
- C语言 链表的创建--打印--逆置--新增--删除--排序--释放
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string. ...
- C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...
- 链表基本操作与排序(c语言)
本设计程序用C编写,完成单链表的生成,任意位置的插入.删除,以及确定某一元素在单链表中的位置.实现三种排序算法-冒泡排序.快速排序.合并排序.产生四个长度为100,1000,10000,50000的随 ...
- typedef的用法 单向链表的查找、增加、删除、销毁。
一:typedef的用法. 写一个数据结构(计算机存储数据的一种方式,是抽象的,可以人为组织,提高算法效率),我们需要注意:接口友好,模块化,规范命名等方面,在接口友好方面,typedef是非常 ...
- 转: KindEditor 图片空间文件增加删除文件、文件夹功能(ASP语言环境)
KindEditor 图片上传功能中集成的图片空间文件管理插件可以对已上传图片进行管理,十分便捷,只是没有图片删除功能,仔细研读xieliang分享的经验后,自己动手改造了一下,顺便分享给有同样需求的 ...
- C语言习题 链表建立,插入,删除,输出
Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 222 Solved: 92 [Subm ...
- C 单向链表的创建、插入及删除
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节 ...
- YTU 2430: C语言习题 链表建立,插入,删除,输出
2430: C语言习题 链表建立,插入,删除,输出 时间限制: 1 Sec 内存限制: 128 MB 提交: 576 解决: 280 题目描述 编写一个函数creatlink,用来建立一个动态链表 ...
- C语言链表中数组实现数据选择排序,升序、降序功能主要难点
链表排序讲解: head指针指向链表的头结点,是找到整个链表的唯一依据,如果head指针丢失,整个链表就找不到了. head存储的是第一个节点的地址,head->next存储的是第二个节点的地址 ...
随机推荐
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- 【python基础语法】模块和包管理,文件的操作(第8天课堂笔记)
''' 模块和包管理 模块和包的定义: 模块:模块是一个Python文件,以.py结尾,包含了Python对象定义和Python语句 包:Python中的包就是一个包含__init__.py文件的目录 ...
- python練習
#登录,账户密码储存在文件中,限制登录 count = 0 for i in range(3): b = input("账号:") c = b + "," + ...
- shiro权限认证Realm的四大用法
一.SimpleAccountRealm public class AuthenticationTest { SimpleAccountRealm sar=new SimpleAcc ...
- EntityManager的Clear方法的使用
在日常开发中,如果使用hibernate的话,常常会被hibernate的事务搞得焦头烂额.今天解决了之前项目中一直存在的问题,记录一下. 问题描述 有一张表TemplateCopy,如下 publi ...
- LAMP集成环境搭建
本教程是在centos6.8 64位系统下进行操作 我们首先准备搭建LAMP环境 LAMP指的是Linux.Apache.MySQL 和 PHP 如果要安装PHP5.5 需要 首先rpm -ivh h ...
- npm常用模块汇总
npm常用模块汇总: 点击插件名字,查看使用文档 npm常用模块汇总 node常用模块汇总 gulp常用插件汇总 npx 使用教程:npx使用教程 bable:bable这是JavaScript编译器 ...
- hdu6212 Zuma(区间dp)
#pragma GCC optimize(2) #include <bits/stdc++.h> #define ll long long #define ls(i) i<<1 ...
- tp5使用PHPexcel扩展导出excel表
1,使用composer安装phpexcel包: composer require phpoffice/phpexcel 2,在控制器中创建方法: (1)使用PHPexcel扩展.代码如下 /** * ...
- Nginx出现403 forbidden
我装在linux上的nginx版本是1.16 当我在nginx/conf/nginx.conf文件里配置完代理 location /ds { root /home/nginx; index index ...