28_链表插入和删除算法的演示.swf
#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的更多相关文章
- 链表插入和删除,判断链表是否为空,求链表长度算法的,链表排序算法演示——C语言描述
关于数据结构等的学习,以及学习算法的感想感悟,听了郝斌老师的数据结构课程,其中他也提到了学习数据结构的或者算法的一些个人见解,我觉的很好,对我的帮助也是很大,算法本就是令人头疼的问题,因为自己并没有学 ...
- 数据结构Java实现03----单向链表的插入和删除
文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定) 概念: 链式存储结构是基于指针实现的.我们把一个数据 ...
- 数据结构Java实现02----单向链表的插入和删除
文本主要内容: 链表结构 单链表代码实现 单链表的效率分析 一.链表结构: (物理存储结构上不连续,逻辑上连续:大小不固定) 概念: 链式存储结构是基于指针实现的.我们把一个数据 ...
- 面试之路(10)-BAT面试之java实现单链表的插入和删除
链表的结构: 链表在空间是不连续的,包括: 数据域(用于存储数据) 指针域(用于存储下一个node的指针) 单项链表的代码实现: 节点类 构造函数 数据域的get,set方法 指针域的get,set方 ...
- 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】
本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...
- C语言习题 链表建立,插入,删除,输出
Problem B: C语言习题 链表建立,插入,删除,输出 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 222 Solved: 92 [Subm ...
- 链表创建和链表遍历算法的演示_C语言
今天搞了一个多小时,头是疼的,应该是没休息好吧,学习了数据结构这一节,感觉收益良多,下面贴上代码和心得: /*24_链表创建和链表遍历算法的演示*/ # include <stdio.h> ...
- 算法与数据结构(十) 二叉排序树的查找、插入与删除(Swift版)
在上一篇博客中,我们主要介绍了四种查找的方法,包括顺序查找.折半查找.插入查找以及Fibonacci查找.上面这几种查找方式都是基于线性表的查找方式,今天博客中我们来介绍一下基于二叉树结构的查找,也就 ...
- java数组及数组的插入,删除,冒泡算法
1.数组的定义 数组为相同类型的若干个数据,在一个数组里面,不能存放多种不同类型的数据,其中每个数据为该数组的一个元素,可以通过下标对改元素进行访问. 1.1 数组的特点 (1)数组被创建后,长度就已 ...
随机推荐
- Beta冲刺 —— 5.31
这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.讨论并解决每个人存在的问 ...
- (Java实现) 洛谷 P1031 均分纸牌
题目描述 有NN堆纸牌,编号分别为 1,2,-,N1,2,-,N.每堆上有若干张,但纸牌总数必为NN的倍数.可以在任一堆上取若干张纸牌,然后移动. 移牌规则为:在编号为11堆上取的纸牌,只能移到编号为 ...
- Java实现 LeetCode 462 最少移动次数使数组元素相等 II
462. 最少移动次数使数组元素相等 II 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1. 您可以假设数组的长度最多为10000. 例如: 输 ...
- Java实现蓝桥杯日志统计
标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在ts时刻编号id的帖子收到一个"赞" ...
- Java实现 洛谷 P1015 回文数(N进制回文数)
输入输出样例 输入样例#1: 10 87 输出样例#1: STEP=4 import java.util.Scanner; public class 回文数2 { public static void ...
- Java实现找零问题
1 问题描述 现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < - < dm的硬币?(PS:假设这m种面值d1 < d2 < d3 < - ...
- java实现第六届蓝桥杯打印菱形
打印菱形 给出菱形的边长,在控制台上打印出一个菱形来. 为了便于比对空格,我们把空格用句点代替. 当边长为8时,菱形为: .......* ......*.* .....*...* ....*.... ...
- 一、kafka 介绍 && kafka-client
一.kafka 介绍 1.1.kafka 介绍 Kafka 是一个分布式消息引擎与流处理平台,经常用做企业的消息总线.实时数据管道,有的还把它当做存储系统来使用. 早期 Kafka 的定位是一个高吞吐 ...
- 【扯皮系列】一篇与众不同的 String、StringBuilder 和 StringBuffer 详解
碎碎念 这是一道老生常谈的问题了,字符串是不仅是 Java 中非常重要的一个对象,它在其他语言中也存在.比如 C++.Visual Basic.C# 等.字符串使用 String 来表示,字符串一旦被 ...
- javascript 面向对象学习(一)——构造函数
最近在学习设计模式,找了很多资料也没有看懂,看到怀疑智商,怀疑人生,思来想去还是把锅甩到基础不够扎实上.虽然原型继承.闭包.构造函数也都有学习过,但理解得不够透彻,影响到后续提高.这次重新开始学习,一 ...