快速排序&静态链表的插入排序

//本程序适合在turbo c++ 运行,内部的许多注释是本人在调试使用的,以跟踪错误所在并未去掉
/*静态连表插入排序*/
#define SIZE 100
#define KeyType int
#define MAXINT  30000
#include<stdio.h>
#include<stdlib.h>
#include"iostream.h"
int safe=0;
typedef struct{
  KeyType key;
  int next;
}SNode;
typedef struct {
 SNode r[SIZE];
 int length;
}SLink;
void outputkey(SLink* sl);
void outputnext(SLink* sl);
void Soutput(SLink * sl);
void Arrange(SLink *);
void main(){
 SLink SL;
 int index,pre_index;
  int i;
 printf("Now bigin to input the list :nFirst input the length:");
 scanf("%d",&SL.length);
 printf("please input %d elementsn",SL.length  );
 for(i=1;i<=SL.length;i++)
   {scanf("%d",&(SL.r[i].key));
   } 
   printf("Review the array: ");
   outputkey(&SL);
     SL.r[0].key=MAXINT;
  SL.r[0].next=1;
  SL.r[1].next=0;
  for(i=2;i<=SL.length;i++){
 pre_index=0;
    index=SL.r[pre_index].next;
    do{
  //   cout<<"i:"<<i<< "index:"<<index<<endl;
    if(SL.r[i].key<=SL.r[index].key)
       {SL.r[pre_index].next=i;
       SL.r[i].next=index;
       break;
       }
 else{
  pre_index=index;
  index=SL.r[index].next;
 }

      safe++;
     if(safe>15){cout<<"Error occured!n"<<endl; exit(0);}
     }while(index<i);

  }    /*end for*/
 cout<<"final check:";
 outputkey(&SL);
 Soutput(&SL);
 cout<<"Final array:";
 Arrange(&SL);
 outputnext(&SL);
}//end main

void outputkey(SLink* sl){
  int i;
  for(i=0;i<=sl->length;i++){
    printf("%d ",sl->r[i].next);
   }
printf("n");

时间: 2024-10-28 18:20:32

快速排序&静态链表的插入排序的相关文章

PHP实现的静态链表

PHP实现的单链表,如下代码: <?php      //结点类      class Node{          private $next = NULL; //下一个结点指针          private $data = NULL; //数据               public function Node($data, $next = NULL){              $this->data = $data;              $next && $

大话数据结构三:线性表的链式存储结构(静态链表)

1. 静态链表:用数组描述的链表叫静态链表,通常为方便数据插入,我们会把数组建的大一些. 2. 数组元素(node):由两个数据域组成(data,cursor).数据域data用来存放数据元素,也就是通常我们要处理的数据:而cursor相当于单链表中的指针,存放该元素的后继在数组中的下标. 3. Java实现静态链表: // 静态链表 class StaticLinkedList { private int size; private Node[] node = new Node[100]; /

数据结构的C++实现之静态链表

首先我们让数组的元素都是由两个数据域组成,data和cur.也就是说,数组的每一个下标都对应一个data和一个cur. 数据域data用来存放数据元素,也就是通常我们要处理的数据:而游标cur相当于单链表中的next指针,存放该元素的后继在数组中的下标.我们把这种用数组描述的链表叫做静态链表. 数组的第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标:而数组的最后一个元素的cur则存放第一个有数值的元素的下标,相当于单链表的头节点作用,当整个链表为空时,则为0,表示无指向.如图

c 数据结构 静态链表-C语言静态链表问题,vc下为什么会编译不通过呢?

问题描述 C语言静态链表问题,vc下为什么会编译不通过呢? #include #include #include #define NULL 0 #define Maxsize 100 typedef int elemtype,status; typedef struct { int cur; elemtype data; }component,SLinkList[Maxsize];/*SLinkList是一个结构体数组*/ void Initspace_SL(SLinkList &space)/

C语言静态链表和动态链表_C 语言

1. 静态链表 结构体中的成员可以是各种类型的指针变量,当一个结构体中有一个或多个成员的基类型是本结构体类型时,则称这种结构体为"引用自身的结构体".如: struct link { char ch; struct link *p; } a; p是一个可以指向 struct link 类型变量的指针成员.因此,a.p = &a 是合法的表达式,由此构成的存储结构如图1所示. 图1 引用自身的结构体 例1 一个简单的链表 #include <stdio.h> stru

C语言实现静态链表的方法_C 语言

在动手之前我一直以为静态链表和动态链表没有什么差别,细细一想才发现,原来静态链表之中隐藏着一个非常值得讨论的话题--内存管理. 静态链表的"静态"二字是指内存的来源为静态内存(通常用全局数组).与动态链表不同,在静态链表中节点内存的申请与释放都需要自行维护,由于这里是链表,也很容易想到将空余的节点链接起来形成一个free_list,每次需要时从free_list头部取出一个节点,释放时再将节点加到头部,这样就能够非常容易的实现链表的其他操作. 复制代码 代码如下: // 静态链表 的实

线性链表其他种类(静态,双向,循环)的存储结构和常见操作

一.静态单链表 在不支持动态空间分配的环境中,要使用链表存储数据,那么可采用静态链表的方法:即在一块预分配的存贮空间中,用下标作为指针链来构成链式结构. //既然是静态链表,那么可以使用一维数组实现存储,java没有指针,那么就用这来使用链表结构 //在不支持动态空间分配的环境中,要使用链式结构技术,可采用静态链表的方法:即在一块预分配的存贮空间中,用下标作为指针. //存储结构:在数组中增加一个"指针"域,存放下一元素在数组中的下标.且0为代表空指针   //设S为SLinkList

插入排序之表插入排序

1.表插入排序只是求得一个有序的链表,它是修改指针的值来代替移动记录,操作过程如下 2.但是这样只能进行顺序查找,不能进行随机查找,为了能实现有序表的折半查找,需要对记录进行重新排列.操作过程如下: 3.测试程序如下: #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> using namespace std; typedef struct xxx{ int he

JavaScript中数据结构与算法(三):链表

  这篇文章主要介绍了JavaScript中数据结构与算法(三):链表,本文分别讲解了单链表与双链表以及增加节和删除节的代码实例,需要的朋友可以参考下 我们可以看到在javascript概念中的队列与栈都是一种特殊的线性表的结构,也是一种比较简单的基于数组的顺序存储结构.由于javascript的解释器针对数组都做了直接的优化,不会存在在很多编程语言中数组固定长度的问题(当数组填满后再添加就比较困难了,包括添加删除,都是需要把数组中所有的元素全部都变换位置的,javascript的的数组确实直接