#include<stdio.h>
#include<malloc.h>
#include <stdio.h>
#include <stdlib.h> typedef struct Node{
int data;//数据源
struct Node* pNext;//指针域
}NODE,*PNODE; // NODE等价于struct Node,PNODE等价于struct Node*;
//函数的声明
//创建一个非循环的链表
PNODE create_list(void){
int len;//存放结果的数目
int val;
//创建头结点,该头结点不存储数据
PNODE pHead = (PNODE)malloc(sizeof(NODE));
PNODE pTail = pHead; //保证PTail永远指向链表的尾结点
pTail->pNext = NULL;
if(NULL == pHead){
printf("程序内存分配失败");
exit(-);
}
printf("请输入你要创建节点的数目:");
scanf("%d",&len);
for(int i = ;i < len;i++){
printf("请输入第%d节点的值:",i+);
scanf("%d",&val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew){
printf("程序内存分配失败");
exit(-);
}
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead; } /*
判断链表是否为null
*/ bool isEmpty(PNODE pHead){
if(pHead->pNext == NULL){//说明链表为空
return true;
}else{
return false;
}
} /*
获得链表的长度
*/ int length_list(PNODE pHead){
int count = ;
PNODE p = pHead->pNext; // 第一个节点不存储数据,所以要移动下一个节点
while(NULL != p){//说明该节点不为null
int val = p->data; //得到数据
p=p->pNext;//p移动到下一个节点
count=count+;
}
return count;
} /*
输出该链表的所有值
*/
void printf_list(PNODE pHead){
PNODE p = pHead->pNext; // 第一个节点不存储数据,所以要移动下一个节点
while(NULL != p){//说明该节点不为null
int val = p->data; //得到数据
printf("%d\n",val);
p=p->pNext;//p移动到下一个节点
} }
/*
对链表进行排序
仿造对数组的排序
for(int i = 0 ; i< len -1 ;i++){
for( int j = i+ 1; j< len ;j++){ } } */
//单链表的排序
void sort_list(PNODE pHead)
{
int i,j,t;
PNODE p=pHead->pNext; for(i=;i<length_list(pHead)-;i++)
{
p=pHead->pNext;
for(j=;j<length_list(pHead)-i-;j++)
{
if(p->data < p->pNext->data) //冒泡法,将最小的冒泡到最后,降序排列;
{
t=p->data;
p->data = p->pNext->data ;
p->pNext->data = t ;
}
p=p->pNext;
}
}
} /*
for(i=0;i<n-1;i++) for(j=i+1;j<n;j++)
**/
void sort_array(int*arr,int len){ int i = ;
int j = ;
int temp;
for(i = ;i< len-;i++){ //p要执行当前节点的下一个节点
for(j = i+;j<len;j++){
if(arr[i]>arr[j]) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
} }
void print_array(int*arr,int len){
for(int k = ; k<len;k++){
printf("a[%d]=%d\n",k,*(arr+k));
}
} /*
在链表的pos下标插入值val ,并且pos的值必须大于1
*/ void insert(PNODE pHead,int pos,int val){
int i=;
PNODE p=pHead; //不需判断链表是否为空,不需判断pos是否满足链表长度要求等。。此部分用while和if全部搞定
while(NULL!=p&&i<pos-) //不能写成<=,否则出错
{
i++;
p=p->pNext;
}
if(i>pos- || NULL==p)
return false; PNODE pNew=(PNODE)malloc(sizeof(NODE));
if(NULL==pNew)
{
cout<<"分配失败,程序终止!"<<endl;
exit(-);
} pNew->data =val;
PNODE q=p->pNext;
p->pNext =pNew;
pNew->pNext =q; return true;
} /*
将链表的pos位置的数据删除 ,删除的数据保存到 int*val变量中
*/ bool delete_list(PNODE pHead,int pos,int *pVal)
{
int i=;
PNODE p=pHead; //不需判断链表是否为空,不需判断pos是否满足链表长度要求等。。此部分用while和if全部搞定
while(NULL!=p->pNext &&i<pos-) //不能写成<=,否则出错
{
i++;
p=p->pNext;
}
if(i>pos- || NULL==p->pNext )
return false; PNODE q=p->pNext ;
*pVal=q->data ; //删除p后面的节点
p->pNext =p->pNext->pNext;
free(q);
q=NULL; return true;
} int main(){
PNODE pHead = NULL;//定义一个结构体指针变量
pHead = create_list();
printf("排序之前的数据是:\n");
printf_list(pHead);
sort_list(pHead);
//int arr[5] = {10,80,100,20,50};
// print_array(arr,5);
//sort_array(arr,5);
//sort_list(pHead);
printf("排序之后的数据是:\n");
printf_list(pHead);
//print_array(arr,5);
return ;
}

28_链表插入和删除算法的演示.swf的更多相关文章

  1. 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述

    关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...

  2. 数据结构Java实现03----单向链表的插入和删除

    文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定)            概念: 链式存储结构是基于指针实现的.我们把一个数据 ...

  3. 数据结构Java实现02----单向链表的插入和删除

    文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定)            概念: 链式存储结构是基于指针实现的.我们把一个数据 ...

  4. 面试之路(10)-BAT面试之java实现单链表的插入和删除

    链表的结构: 链表在空间是不连续的,包括: 数据域(用于存储数据) 指针域(用于存储下一个node的指针) 单项链表的代码实现: 节点类 构造函数 数据域的get,set方法 指针域的get,set方 ...

  5. 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】

    本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...

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

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

  7. 链表创建和链表遍历算法的演示_C语言

    今天搞了一个多小时,头是疼的,应该是没休息好吧,学习了数据结构这一节,感觉收益良多,下面贴上代码和心得: /*24_链表创建和链表遍历算法的演示*/ # include <stdio.h> ...

  8. 算法与数据结构(十) 二叉排序树的查找、插入与删除(Swift版)

    在上一篇博客中,我们主要介绍了四种查找的方法,包括顺序查找.折半查找.插入查找以及Fibonacci查找.上面这几种查找方式都是基于线性表的查找方式,今天博客中我们来介绍一下基于二叉树结构的查找,也就 ...

  9. java数组及数组的插入,删除,冒泡算法

    1.数组的定义 数组为相同类型的若干个数据,在一个数组里面,不能存放多种不同类型的数据,其中每个数据为该数组的一个元素,可以通过下标对改元素进行访问. 1.1 数组的特点 (1)数组被创建后,长度就已 ...

随机推荐

  1. Pytorch分类和准确性评估--基于FashionMNIST数据集

    最近在学习Pytorch v1.3最新版和Tensorflow2.0. 我学习Pytorch的主要途径:莫烦Python和Pytorch 1.3官方文档 ,Pytorch v1.3跟之前的Pytorc ...

  2. 用Python做词云可视化带你分析海贼王、火影和死神三大经典动漫

    对于动漫爱好者来说,海贼王.火影.死神三大动漫神作你肯定肯定不陌生了.小编身边很多的同事仍然深爱着这些经典神作,可见"中毒"至深.今天小编利用Python大法带大家分析一下这些神作 ...

  3. python3程序开发指南——第1章 笔记

    python文件的扩展名为.py ,但是python GUI程序的扩展名为.pyw 在python中,注释以#开始,作用范围为该行 IDLE提供了三个关键功能:输入python表达式与代码,并在pyt ...

  4. CSS选择器有哪些?哪些属性可以继承?

    CSS选择符: id选择器(#myid). 类选择器(.myclassname). 标签选择器(div, h1, p). 相邻选择器(h1 + p). 子选择器(ul > li). 后代选择器( ...

  5. ssh-copy-id to filter out any that...ERROR: Read from socket failed: Connection reset by peer

    ssh-copy-id bigboss1 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter ...

  6. 震惊!Windows Service服务和定时任务框架quartz之间原来是这种关系……

    过场CG:   接到公司领导的文件指示,“小熊”需要在6月底去海外执行一个行动代号为[定时任务]的营救计划,这个计划关系到公司某个项目的生死(数据安全漏洞),作战部拟定两个作战方案: 方案一:使用务定 ...

  7. Java实现 LeetCode 374 猜数字大小 II

    375. 猜数字大小 II 我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字,你来猜我选了哪个数字. 每次你猜错了,我都会告诉你,我选的数字比你的大了或者小了. 然而,当你猜 ...

  8. Java实现 蓝桥杯 历届真题 稍大的串

    串可以按照字典序进行比较.例如: abcd 小于 abdc 如果给定一个串,打乱组成它的字母,重新排列,可以得到许多不同的串,在这些不同的串中,有一个串刚好给定的串稍微大一些.科学地说:它是大于已知串 ...

  9. Java实现 洛谷 P1010 幂次方

    输入输出样例 输入 #1 1315 输出 #1 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) import java.util.Scanner; pu ...

  10. vi命令总结

    VI常用技巧 ​ VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐 ...