#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. MySQL安全管理

    数据库服务器通常包含关键的数据,确保这些数据的安全和完整需要利用访问控制. 一.访问控制 MySQL服务器的安全基础:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少. 访问控制:你需要给用 ...

  2. mongo curd

    常用命令 未完待续...

  3. warning Unexpected use of undefined no-undefined

    报错翻译:警告意外使用未定义的no-undefined(谷歌这次翻译的不行) 报错原因undefined直接使用了,如下↓ 其实报错的意思就是这样不安全,看下面一个例子 var foo = undef ...

  4. 浅谈background的用法

    div css 背景样式background属性 一.语法及参数 1.语法:background : background-color(颜色) || background-image(图片地址) || ...

  5. go 网络编程

    网络编程 tcp 1.tcp客户端服务端实现 server/server.go package main import ( "fmt" "net" ) /* t ...

  6. 吴裕雄--天生自然 R语言数据可视化绘图(2)

    par(ask=TRUE) opar <- par(no.readonly=TRUE) # save original parameter settings library(vcd) count ...

  7. .Net 程序代码混淆加密工具 ILProtector

    我的项目中某一部分信息比较敏感,但是.Net程序反编译之后连注释都看得到.需要把exe保护起来,如:代码混淆之后再加壳. Bing到一款.Net混淆工具  ILProtector   作为资深工具党, ...

  8. Python3标准库:bisect维护有序列表

    1. bisect维护有序列表 bisect模块实现了一个算法来向列表中插入元素,同时仍保持列表有序. 1.1 有序插入 下面给出一个简单的例子,这里使用insort()按有序顺序向一个列表中插入元素 ...

  9. Python 类 初学者笔记

    面对象编程:编写表现世界中的事物和景象的类,并基于这些类创建对象,被创建的对象称为实例化. 创建类 class Dog(): #Python中类名称中的首字母要大写 def __init__(self ...

  10. 纪中20日c组模拟赛T1 2121. 简单游戏

    T1 2121. 简单游戏 (File IO): input:easy.in output:easy.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto Pro ...