#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语言链表总结(创建,排序,增加,删除)的更多相关文章

  1. C语言 链表的创建--打印--逆置--新增--删除--排序--释放

    #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string. ...

  2. C语言链表操作模板(添加,删除,遍历,排序)

    C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...

  3. 链表基本操作与排序(c语言)

    本设计程序用C编写,完成单链表的生成,任意位置的插入.删除,以及确定某一元素在单链表中的位置.实现三种排序算法-冒泡排序.快速排序.合并排序.产生四个长度为100,1000,10000,50000的随 ...

  4. typedef的用法 单向链表的查找、增加、删除、销毁。

    一:typedef的用法.    写一个数据结构(计算机存储数据的一种方式,是抽象的,可以人为组织,提高算法效率),我们需要注意:接口友好,模块化,规范命名等方面,在接口友好方面,typedef是非常 ...

  5. 转: KindEditor 图片空间文件增加删除文件、文件夹功能(ASP语言环境)

    KindEditor 图片上传功能中集成的图片空间文件管理插件可以对已上传图片进行管理,十分便捷,只是没有图片删除功能,仔细研读xieliang分享的经验后,自己动手改造了一下,顺便分享给有同样需求的 ...

  6. C语言习题 链表建立,插入,删除,输出

    Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 222  Solved: 92 [Subm ...

  7. C 单向链表的创建、插入及删除

    链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节 ...

  8. YTU 2430: C语言习题 链表建立,插入,删除,输出

    2430: C语言习题 链表建立,插入,删除,输出 时间限制: 1 Sec  内存限制: 128 MB 提交: 576  解决: 280 题目描述 编写一个函数creatlink,用来建立一个动态链表 ...

  9. C语言链表中数组实现数据选择排序,升序、降序功能主要难点

    链表排序讲解: head指针指向链表的头结点,是找到整个链表的唯一依据,如果head指针丢失,整个链表就找不到了. head存储的是第一个节点的地址,head->next存储的是第二个节点的地址 ...

随机推荐

  1. C#实现Excel操作——添加页签Sheet

    C#实现对Excel操作,根据数据的类型不同或者来源不同会放在不同的页签中,C#实现添加页签代码如下:(path为文档保存的地址,dt为要处理的源数据) public void addSheet(st ...

  2. Codeforces Round #340 (Div. 2) E XOR and Favorite Number 莫队板子

    #include<bits/stdc++.h> using namespace std; <<; struct node{ int l,r; int id; }q[N]; in ...

  3. 大数据才是未来,Oracle、SQL Server成昨日黄花?

    1. 引子**** 有人在某个专注SQL的公众号留言如下: 这个留言触碰到一个非常敏感的问题:搞关系型数据库还有前途吗?现在都2020年了,区块链正火热,AI人才已经"过剩",大数 ...

  4. springboot打成jar包并携带第三方jar

    1.修改打包方式为jar <packaging>jar</packaging> 2.添加第三方依赖到pom文件 我的第三方依赖包在resources目录下的lib目录下(地址可 ...

  5. Mac brew update 慢~~~

    正题开始之前, 如果对 Homebrew 不太了解, 这里有一篇很好的介绍文章: macOS 包管理工具 Homebrew 不完全指南 花个几分钟读一下, 绝对超值! 正题 Homebrew 通过 G ...

  6. 安装Gitlab到CentOS(YUM)

    运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Gitlab-ce-11.10.1 硬件要求:最低2核4GB,建议4核8GB 安装过程 1.安装 ...

  7. PP: Time series anomaly detection with variational autoencoders

    Problem: unsupervised anomaly detection Model: VAE-reEncoder VAE with two encoders and one decoder. ...

  8. Python3 基本语法 学习笔记

    如何定义python源文件的文件编码 如果想要定义文件代码的编码,一个特殊的注释应该放到源文件的第一或第二行,例如: # coding=<encoding name> 或 使用一种大多数编 ...

  9. 复习mongoose的基本使用

    mongodb参考 mongoose官网 mongoose用起来更便捷,更方便些

  10. 剑指offer-面试题17-打印从1到最大的n位数-数字

    /* 题目: 输入数字n,按顺序打印从1到最大的n位十进制数. 如输入3,打印从1,2,3到999. */ /* 思路: 大数问题转化为字符串或数组. */ #include<iostream& ...