链表选择排序算法功能实现演示

算法:
狭义的算法是与数据的存数方式密切相关
广义的算法是与数据的存储方式无关
泛型:
利用某种技术达到的效果就是:不同的存数方式,执行的操作是一样的 

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>typedef struct Node {int data;  //数据域struct Node * pNext;   //指针域}Node, *pNode;//函数声明
pNode create_list();
void traverse_list(pNode  pHead);bool is_empty(pNode pHead);          //判断链表是否为空
int length_list(pNode pHead);        //链表的长度
bool insert_list(pNode, int, int);   //插入  第一个参数表示插入的链表  第二个参数表示插入的位置  第三个参数表示插入的元素
bool delete_list(pNode, int, int *); //第一个参数表示要删除的位置,第二个参数表示要删除的位置 第三参数表示删除的元素的地址放入指针
void sort_list(pNode pHead);int main(void) {pNode  pHead = NULL;   //等价于 struct Node *pHead=NULLpHead = create_list();    //create_list()创建一个非循环单链表,并将该链表的头结点的地址赋给pHeadtraverse_list(pHead);int len = length_list(pHead);printf("链表的长度%d\n", len);sort_list(pHead);      //选择排序traverse_list(pHead);  //遍历输出while(true){}return 0;
}//创建单链表
pNode create_list() {int len;   //用来存放有效节点数int i;int val; //存放用户临时输入的节点数据//我们首先要先生成一个头结点  不存放有效数据pNode pHead = (pNode)malloc(sizeof(Node));if (NULL == pHead) {printf("内存分配失败");//程序退出exit(-1);}pNode pTail = pHead;    //pTail也指向了头结点pTail->pNext = NULL;printf("请输入你要输入节点的个数 len =");scanf_s("%d", &len);//假设输入的长度5,我们需要循环for ( i = 0; i < len; i++){printf("请输入第%d个节点的值:", i + 1);scanf_s("%d", &val);pNode pNew=(pNode)malloc(sizeof(Node));if (NULL == pNew) {printf("内存分配失败");//程序退出exit(-1);}pNew->data = val;//pHead->pNext = pNew;//pNew->pNext = NULL;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");return;
}//判断链表是否为空
bool is_empty(pNode pHead) {if (NULL == pHead->pNext) {return true;}else {return false;}
}//求一个链表的长度
int length_list(pNode pHead) {pNode p=pHead->pNext;   //第一个节点int len = 0;while (NULL != p) {   //只要指针指向的下一个元素不是空,指针就继续向后移动++len;p=p->pNext;}return len;
}//排序算法
void sort_arr(pNode pHead) {int i, j, tmp;int arr[6] = { 5,8,45,2,9,3 };int len=length_list(pHead);  //获取链表长度pNode p, q;for (i = 0; i < len-1; i++){for (j = i+1; j < len; j++){}}}//选择排序  从小到大排
void sort_list(pNode pHead){int i,j,t;int len = length_list(pHead);  //获取链表长度pNode p,q;for (i = 0, p = pHead->pNext; i < len - 1; ++i, p = p->pNext){for (j = i + 1, q = p -> pNext; j < len; ++j, q = q->pNext) {if (p->data > q->data) {        //类似于 数组中的: a[i] > a[j]t = p->data;                //类似于数组中的: t = a[i];p->data = q->data;          //类似于数组中的: a[i] = a[j];q->data = t;                // 类似于数组中的: a[j] = t;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iptables学习(2)

Iptables 的基本配置&#xff0c;首先我们可以先把原有的清空 # iptables –F# iptables –X 设定INPUT、OUTPUT的默认策略为DROP&#xff0c;FORWARD为ACCEPT iptables -P INPUT DROPiptables -P OUTPUT DROPiptables -P FORWARD ACCEPT 打开“回环”&#xff08;自己机器可以…

C#使用SQLite数据库的代码示例

在 .NET 里面使用 SQLite&#xff0c; 我这里使用的wrapper是 System.Data.SQLite&#xff0c;它只需要一个dll,接口符合ADO.Net 2.0的定义,性能也不错,NHibernate用的也是它&#xff0c;目前支持ADO.NET 3.5了&#xff0c;支持集成在 VS2005 和 VS2008里面&#xff0c;而且支持…

链表插入功能实现演示

#include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h>typedef struct Node {int data; //数据域struct Node * pNext; //指针域}Node, *pNode;//函数声明 pNode create_list(); void traverse_list(pNode pHead); …

【.NET程序性能分析】使用VS自带的工具分析.NET程序的性能

这篇博文给大家分享的是&#xff0c;如何使用VS自带的性能分析工具来分析我们编写的.NET程序&#xff0c;一边找出程序性能的瓶颈&#xff0c;改善代码的质量。在实际开发中&#xff0c;性能真的很重要&#xff0c;往往决定一个产品的生死~良好的用户体验的基础之一也是程序要有…

链表删除功能实现演示

插入算法和删除演示&#xff1a; #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h>typedef struct Node {int data; //数据域struct Node * pNext; //指针域}Node, *pNode;//函数声明 pNode create_list(); void …

如何编写Ajax库

Ajax请求步骤 1. 创建AJax对象 2. 连接服务器 3. 发送请求 4. 接受返回 1 function ajax(url, fnSucc, fnFaild)2 {3 //1.创建ajax对象4 var oAjaxnull;5 6 if(window.XMLHttpRequest)7 {8 oAjaxnew XMLHttpRequest();9 } 10 …

数组和链表的总结

数据结构 狭义: 数据结构是专门研究数据存储的问题 数据的存储包含两方面:个体的存储 个体关 系的存储 广义: 数据结构既包含数据的存储也包含数据的操作 对存储数据的操作就是算法 算法: 狭义&#xff1a; 算法是和数据的存储方式密切相关 广义&#xff1a; 算法和数…

[转]CPoint+CSize+CRect学习大纲

CPointCSizeCRect学习大纲。熟知CPoint、CSize、CRect类的基类class CPoint : public tagPOINTclass CSize : public tagSIZEclass CRect : public tagRECT留意CPoint、CSize、CRect之间的互操作&#xff0c;什么样的操作会涉及这些类型中的两个或多个。Point - Point > Siz…

栈入门

线性结构的两种常见应用之一栈 定义&#xff1a;一种可以实现”先进后出”的存储结构&#xff0c;栈类似于箱子 分类&#xff1a;静态栈、动态栈 算法&#xff1a;出栈、压栈 栈的定义&#xff1a; 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性…

Packet Tracer 5.0实验(四) 利用三层交换机实现VLAN间路由

一、实验目标 掌握交换机Tag VLAN 的配置&#xff1b;掌握三层交换机基本配置方法&#xff1b;掌握三层交换机VLAN路由的配置方法&#xff1b;通过三层交换机实现VLAN间相互通信&#xff1b;二、实验背景 某企业有两个主要部门&#xff0c;技术部和销售部&#xff0c;分处于不同…

栈程序演示

#include <stdio.h> #include <malloc.h> #include <stdlib.h>typedef struct Node{int data;struct Node * pNext; }NODE,*PNODE;typedef struct Stack{PNODE pTop; //栈顶元素PNODE pBottom; //栈底部元素 }STACK,*PSTACK;void init(PSTACK); v…

noi 2009 二叉查找树 动态规划

思路&#xff1a; 先把权值离散化 按数据值排序 sum[i]为前i个节点频度和 dp[i][j][w]表示把节点[i,j]合并成一颗根节点权值不小于w的子树所需的访问代价与修改代价的最小和 dp[i][j][w]min(dp[i][k-1][w]dp[k1][j][w]sum[j]-sum[i-1]K,dp[i][k-1][a[k].weight]dp[k1][j][a[k].…

出栈程序演示

#include <stdio.h> #include <malloc.h> #include <stdlib.h>typedef struct Node{int data;struct Node * pNext; }NODE,*PNODE;typedef struct Stack{PNODE pTop; //栈顶元素PNODE pBottom; //栈底部元素 }STACK,*PSTACK;void init(PSTACK); v…

不管你挣多少钱永远都是问题

近几个月太多事情&#xff0c;太多变化&#xff0c;一直没有心情写博客&#xff0c;今天补上一篇吧&#xff01; 我会一直在这里坚持下去的&#xff01;他年收入100多万开着一辆宝马5&#xff0c;天天被应酬折腾的要死要活&#xff0c;真想狠狠心不干了&#xff0c;当初干嘛非要…

栈清空程序演示

#include <stdio.h> #include <malloc.h> #include <stdlib.h>typedef struct Node{int data;struct Node * pNext; }NODE,*PNODE;typedef struct Stack{PNODE pTop; //栈顶元素PNODE pBottom; //栈底部元素 }STACK,*PSTACK;void init(PSTACK); v…

hdu 1325 Is It A Tree?

题目链接 #include"stdio.h" int set[1001],v[1001],cnt[10001],flag; //初始化 void fun() {int i;flag1;for(i1;i<1000;i){set[i]i;v[i]0;cnt[i]0;} } //查找根节点 int find(int x) {return xset[x]?x:find(set[x]); } int judge() {int i,t;for(i1;i<1000…

数据库的介绍

##本单元目标 一、为什么要学习数据库 二、数据库的相关概念 DBMS、DB、SQL 三、数据库存储数据的特点 四、初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停止 ★ …

InfoPath Resource Sites

http://blogs.msdn.com/infopath_support/archive/2009/11/09/9919841.aspx转载于:https://www.cnblogs.com/mingle/archive/2012/07/24/2606277.html

MySQL的常见命令

###MySQL的常见命令 1.查看当前所有的数据库 show databases; 2.打开指定的库 use 库名 3.查看当前库的所有表 show tables; 4.查看其它库的所有表 show tables from 库名; 5.创建表 create table 表名( 列名 列类型, 列名 列类型…

算法导论 CLRS 22.4-4 解答

先说结论&#xff1a; 对于有环图&#xff0c;top排序不一定可以生成坏边最小的序列 证明&#xff1a; 1. 假设G至少需要去掉k条边才能变成无环图&#xff0c;则任意序列P的坏边数目bad[P] > k&#xff1b; 证明&#xff1a; 如果存在P使得bad[P] < k, 则只要去掉P中的坏…