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存储的是第二个节点的地址 ...
随机推荐
- python-21-生成器又是什么东西?
前言 生成器,只要含有yield关键字的函数都是生成器函数,但yield不能和return共用且需要写在函数内. 生成器,是返回一个迭代器的函数,说白了生成器也是迭代器. 一.生成器简介 1.只要含有 ...
- VSTO开发指南(VB2013版) 第一章 Office对象模型
完美地将visual basic和office 办公软件结合起来.来自微软公司VSTO小组的权威专家所编著. 全书共712页,内容极其全面而深入,猛一看,厚地犹如庞然大物.看完离大神就不远了哦< ...
- Windows2008R2 一键安全优化脚本
::author vim ::QQ 82996821 ::filename Windows2008R2_safe_auto_set.bat :start @echo off color 0a ...
- JS DOM用不同方法获取节点及对节点插入、复制和移除
操作节点的方法 appendChild() insertBefore() replaceChild() cloneNode() normalize() splitText() sppendChild( ...
- Qt实践基础-简单的登录界面的实现
主要代码的实现: 1.为了更好的实现界面的组织,采用C++直接构建UI 2.登录多次密码错误则断开“确认”按钮的链接 3.注意理解static变量的应用 4.QString类的使用更像继承了strin ...
- 修改 div 的滚动条的样式
修改 div 的滚动条的样式 需要用到浏览器专属的伪元素,没有万能的办法,支持的浏览器不是很多. 假设有一个(你已经)设好宽高.定好位的 div, <div class="group- ...
- P1001 A+B Problem(int,long long)
题目描述 输入两个整数 a,b,输出它们的和(∣a∣,∣b∣≤109). 注意 Pascal 使用 integer 会爆掉哦! 有负数哦! C/C++ 的 main 函数必须是 int 类型,而且最后 ...
- Quartz.NET - 教程 4: 更多关于触发器
译者注: 目录在这 [译]Quartz.NET 3.x 教程 译者注: 原文在这 Lesson 4: More About Triggers 跟作业一样, 触发器也相当容易使用, 但确实包含各种可定制 ...
- C#效率优化(4)-- 编译器对数组遍历的优化
在平时开发过程中,数组是我们使用频率最高的类型之一,在使用定长列表时,数组可以说是最佳方案,这也是我们最熟悉的数据结构之一. 在C#中使用数组,可以获取在内存上连续的相同类型的一组变量,在连续访问时可 ...
- 【spring boot】SpringBoot初学(2.1) - properties读取明细
前言 算是对<SpringBoot初学(2) - properties配置和读取>的总结吧. 概念性总结 一.Spring Boot允许外化(externalize)你的配置.可以使用pr ...