#include<stdio.h>
#include<stdlib.h>
#include"LinkList.h" //创建单链表
void CreateList(LinkList L,DataType a[],int n){
int i;
for(i=1;i<=n;i++)
InsertList(L,i,a[i-1]);
}
//用链表实现选择排序。 将链表分为两段,p指向应经排序的链表部分。q指向未排序的链表部分
void SelectSort(LinkList L){
ListNode *p,*q,*t,*s;
p=L;
while(p->next->next!=NULL){ //用q指针进行遍历链表
for(s=p,q=p->next;q->next!=NULL;q=q->next)
if(q->next->data<s->next->data)
s=q; //假设q指针指向的元素值小于s指向的元素值,则s=q
if(s!=q){ //假设*s不是最后一个结点,则将s指向的结点链接到p指向的链表后面
t=s->next; //将结点*t从q指向的链表中取出
s->next=t->next;
t->next=p->next; //将结点*t插入到p指向的链表中
p->next=t;
}
p=p->next;
}
}
void main_Select(){
LinkList L,p;
int n=8;
DataType a[]={45,67,21,98,12,39,81,53};
InitList(&L);
CreateList(L,a,n);
printf("排序前:\n");
for(p=L->next;p!=NULL;p=p->next)
printf("%d ",p->data);
printf("\n");
SelectSort(L);
printf("排序后:\n");
for(p=L->next;p!=NULL;p=p->next)
printf("%d ",p->data);
printf("\n");
system("pause");
}
//链表的插入排序
void InsertSort(LinkList L){
ListNode *p=L->next;
ListNode *pre,*q;
L->next=NULL; //初始时,已排序链表为空
while(p!=NULL){ //p是指向待排序的结点
if(L->next==NULL){ //假设*p是第一个结点。则插入到L,并令已排序的最后一个结点的指针域为空
L->next=p;
p=p->next;
L->next->next=NULL;
}else{ //p指向待排序的结点,在L指向的已经排好序的链表中查找插入位置
pre=L;
q=L->next;
while(q!=NULL&&q->data<p->data){ //在q指向的有序表中寻找插入位置
pre=q;
q=q->next;
}
q=p->next; //q指向p的下一个结点。保存待排序的指针位置
p->next=pre->next; //将结点*p插入到结点*pre的后面
pre->next=p; //p指向下一个待排序的结点
p=q;
}
}
}
void main_Insert(){
LinkList L,p;
int n=8;
DataType a[]={87,34,22,93,102,56,39,21};
InitList(&L);
CreateList(L,a,n);
printf("排序前:\n");
for(p=L->next;p!=NULL;p=p->next)
printf("%d ",p->data);
printf("\n");
InsertSort(L);
printf("排序后:\n");
for(p=L->next;p!=NULL;p=p->next)
printf("%d ",p->data);
printf("\n");
system("pause");
}
void main(){
main_Select();
main_Insert();
}
//单链表
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef int DataType; typedef struct Node
{
DataType data; //数据域
struct Node *next; //指针域
}ListNode,*LinkList; //将单链表初始化为空。 动态生成一个头结点。并将头结点的指针域置为空
void InitList(LinkList *head){
if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)
exit(-1);
(*head)->next=NULL;
}
//推断单链表是否为空,就是通过推断头结点的指针域是否为空
int ListEmpty(LinkList head){
if(head->next==NULL)
return 1;
else
return 0;
}
//查找单链表中第i个结点。查找成功返回该结点的指针表示成功;否则返回NULL表示失败
ListNode *Get(LinkList head,int i){
ListNode *p;
int j;
if(ListEmpty(head))
return NULL;
if(i<1)
return NULL;
j=0;
p=head;
while(p->next!=NULL&&j<i){
p=p->next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
//查找线性表中元素值为e的元素,查找成功将相应元素的结点指针返回。否则返回NULL表示失败
ListNode *LocateElem(LinkList head,DataType e){
ListNode *p;
p=head->next;
while(p){
if(p->data!=e)
p=p->next;
else
break;
}
return p;
}
//查找线性表中元素值为e的元素,查找成功将相应元素的序号返回,否则返回0表示失败
int LocatePos(LinkList head,DataType e){
ListNode *p;
int i;
if(ListEmpty(head))
return 0;
p=head->next;
i=1;
while(p){
if(p->data==e)
return i;
else{
p=p->next;
i++;
}
}
if(!p)
return 0;
}
//在单链表中第i个位置插入一个结点。结点的元素值为e。插入成功返回1,失败返回
int InsertList(LinkList head,int i,DataType e){
ListNode *p,*pre;
int j;
pre=head;
j=0;
while(pre->next!=NULL&&j<i-1){
pre=pre->next;
j++;
}
if(!pre){
printf("wrong place\n");
return 0;
}
if((p=(LinkList)malloc(sizeof(ListNode)))==NULL)
exit(-1);
p->data=e;
p->next=pre->next;
pre->next=p;
return 1;
}
//删除单链表中的第i个位置的结点。删除成功返回1。失败返回0
int DeleteList(LinkList head,int i,DataType *e){
ListNode *pre,*p;
int j;
pre=head;
j=0;
while(p->next!=NULL&&pre->next->next!=NULL&&j<i-1){
pre=pre->next;
j++;
}
if(j!=i-1){
printf("delete wrong place\n");
return 0;
}
p=pre->next;
pre->next=p->next;
free(p);
return 1;
}
int ListLength(LinkList head){
ListNode *p;
int count=0;
p=head;
while(p->next!=NULL){
p=p->next;
count++;
}
return count;
}
void DestroyList(LinkList head){
ListNode *p,*q;
p=head;
while(p!=NULL){
q=p;
p=p->next;
free(q);
}
}

_DataStructure_C_Impl:LinkListBasedSort的更多相关文章

  1. _DataStructure_C_Impl:图的邻接矩阵存储

    //_DataStructure_C_Impl:邻接矩阵 #include<stdio.h> #include<stdlib.h> #include<string.h&g ...

  2. _DataStructure_C_Impl:SeqListBasedSort

    // _DataStructure_C_Impl:Sort #include<stdio.h> #include<stdlib.h> #define MaxSize 50 ty ...

  3. _DataStructure_C_Impl:链串

    //_DataStructure_C_Impl:链串 #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  4. _DataStructure_C_Impl:AOE网的关键路径

    //_DataStructure_C_Impl:CriticalPath #include<stdio.h> #include<stdlib.h> #include<st ...

  5. _DataStructure_C_Impl:Dijkstra算法求最短路径

    // _DataStructure_C_Impl:Dijkstra #include<stdio.h> #include<stdlib.h> #include<strin ...

  6. _DataStructure_C_Impl:图的最小生成树

    #include<stdio.h> #include<stdlib.h> #include<string.h> typedef char VertexType[4] ...

  7. _DataStructure_C_Impl:Floyd算法求有向网N的各顶点v和w之间的最短路径

    #include<stdio.h> #include<stdlib.h> #include<string.h> typedef char VertexType[4] ...

  8. _DataStructure_C_Impl:图的遍历

    #include<stdio.h> #include<stdlib.h> #include<string.h> //图的邻接表类型定义 typedef char V ...

  9. _DataStructure_C_Impl:求图G中从顶点u到顶点v的一条简单路径

    #pragma once #include<stdio.h> #include<stdlib.h> #define StackSize 100 typedef int Data ...

随机推荐

  1. 【BZOJ4016】【FJOI2014】最短路径树问题

    题意: Description 给一个包含n个点,m条边的无向连通图.从顶点1出发,往其余所有点分别走一次并返回. 往某一个点走时,选择总长度最短的路径走.若有多条长度最短的路径,则选择经过的顶点序列 ...

  2. linux下mysqldump简单命令导出数据库和表

    进入mysql的bin目录执行: 导出单个表: mysqldump -uroot -ppassword --database dbname --tables users > /home/root ...

  3. BZOJ 3881 [Coci2015]Divljak(AC自动机+树状数组)

    建立AC自动机然后,加入一个串之后考虑这个串的贡献.我们把这个串扔到AC自动机里面跑.最后对经过每一个点到的这个点在fail树的根的路径上的点有1的贡献.求链的并,我们把这些点按DFS序排序,然后把每 ...

  4. springboot --> web 应用开发-CORS 支持

    一.Web 开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS 等等 CORS 与 JSONP 相比 1. JSONP 只能实现 GET 请求,而 CORS 支持所有类型的 HTT ...

  5. 3步简单实现SSH无密码登录

    下面简单的做下实验: 一:准备2台服务器: 192.168.10.101 2 192.168.10.102 二:关键字解释 ssh-keygen :  产生公钥与私钥对 ssh-copy-id :将本 ...

  6. 安装了python之后Windows的cmd中cd指令无法转换路径怎么办?

    1首先我们看看盘符,我的电脑里有 C D E,F. G盘. 2按下WIN+R键 输入cmd,打开cmd窗口. 3默认路径为用户文档路径,如果想切换到D盘 ,输入cd d: 是不行的. 4:AppDat ...

  7. Windows和Linux的编译理解

    Windows一般编译出来的x86的软件,就是只能在x86的系统上才能运行,同理,在x64系统上也是一样的道理. Linux利用gcc编译器编译,可以在Linux上面运行,但是想要在嵌入式系统上运行的 ...

  8. Maven 编译打包时如何忽略测试用例

    跳过测试阶段: mvn package -DskipTests 临时性跳过测试代码的编译: mvn package -Dmaven.test.skip=true maven.test.skip同时控制 ...

  9. Google笔试(2015年8月)

    华电北风吹 天津大学认知计算与应用重点实验室 日期:2015/8/21 这三道题目的PDF能够在这里下载 https://github.com/ncepuzhengyi/jobHuntingExam/ ...

  10. Python 标准库 —— 队列(Queue,优先队列 PriorityQueue)

    优先队列,有别于普通队列的先入先出(虽然字面上还是队列,但其实无论从含义还是实现上,和普通队列都有很大的区别),也有别于栈的先入后出.在实现上,它一般通过堆这一数据结构,而堆其实是一种完全二叉树,它会 ...