算法与数据结构之一------顺序表

来源:互联网 发布:网络工具书有哪些 编辑:程序博客网 时间:2024/04/29 15:13
/****************************************************************
文件内容:线性表之顺序表操作
版本V1.0
时间:2013-12-12
说明:顺便表其实就是一个数组,在数组附近添加一个标记指针。
顺序表读和写操作方便,有效信息大(相比链表来说),但查找,插入,删除效率低。
通常一个数据结构只涉及到读和写操作,一般使用顺序表来描述,而涉及到
查找,插入删除,等耗时操作,一般使用链表。
 *****************************************************************/ 


#include<stdio.h>
#include<stdlib.h>
//#define RELEASE_VERSION  //release版本开关
//#define TRIDiTION
/*inlude<malloc.h> stdlib.h 包含malloc.h*/
#ifdef RELEASE_VERSION
#define  Log 
#else
#define  Log  printf
#endif
#define MAX 15
/*为了提高程序的可移植性,千万不能使用裸露的数据类型*/
#ifndef UINT32 
typedef unsigned int UINT32 ;
#endif
#ifndef INT32 
typedef  int  INT32 ;
#endif
/*定义一个顺序表*/
#ifndef TRIDiTION
typedef  struct
{
UINT32 tab[MAX]; //数组来描述顺序表
UINT32 probe;  //顺便表的位置标志
} SeqList;
#else
/*也可以使用传统的结构体,传统中struct SeqList = 新型的SeqList*/
  struct SeqList
{
UINT32 tab[MAX];
UINT32 probe;
} ;
#endif 
/****************************************************************
函数功能:初始化顺序表                        
输入参数:  无
返回值: 顺序的表的标头指针 
作者:HFL 
时间:2013-12-12
 *****************************************************************/             
#ifdef TRIDiTION
  struct SeqList * Init_Seqlist()
#else
  SeqList * Init_Seqlist()
#endif 
{
#ifdef TRIDiTION
    struct SeqList * P;
    P =( struct SeqList *)malloc(sizeof(SeqList));
#else
    SeqList *P;
  P =( SeqList *)malloc(sizeof(SeqList));
#endif
if (!P)
{
Log("malloc is failed! \n");
 
}
else
{
Log("malloc is secussed!\n");
}
P->probe = -1;
    return P;
}
  /****************************************************************
函数功能:反初始化顺序表                        
输入参数:  无
返回值: 顺序的表的标头指针 
作者:HFL 
时间:2013-12-12
 *****************************************************************/             
#ifdef TRIDiTION
  void  Uninit_Seqlist(SeqList * L)
#else
  void Uninit_Seqlist(SeqList * L)
#endif 
{
free (L);
return ;
}
 /****************************************************************
函数功能:想顺序表i 位置插入数据                       
输入参数:  插入的数据值,插入的对象表
返回值:  返回值:  成功:0 ;失败:-1 
作者:HFL 
时间:2013-12-12
 *****************************************************************/ 
#ifdef TRIDiTION
  INT32 Insert_Into_I_Seqlist(UINT32  X, struct SeqList *L,INT32 i )
#else
  INT32 Insert_Into_I_Seqlist(UINT32  X, SeqList * L,INT32 i)
#endif 
  {   
 INT32  temp ;// 有符号和无符号不能比较,因此都要统一成有符号类型
  if ( i<=-1|| i>=MAX )  
{
 
 Log ("sorry the Insert position is illegal \n");
 return -1;
 }
 if(L->probe==MAX-1 )
 {
 Log(" sorry!The SeqListb is FULL !\n");
 return -1;
 }
 else
 {
  L->probe++;
  temp = L->probe;
  while(i< temp)
  {
        L->tab[temp]=L->tab[temp-1];
   temp --;
  }
  L->tab[i] = X;
  
 }
 return 0;
  }
/****************************************************************
函数功能:向顺序表尾部插入数据                       
输入参数:  插入的数据值,插入的对象表
返回值:  返回值:  成功:0 ;失败:-1 
作者:HFL 
时间:2013-12-12
 *****************************************************************/ 
#ifdef TRIDiTION
  INT32 Insert_Seqlist(UINT32  X, struct SeqList *L )
#else
  INT32 Insert_Seqlist(UINT32  X, SeqList * L)
#endif 
  {   
 if(L->probe==MAX-1)
 {
 Log(" sorry!The SeqListb is FULL!\n");
 return -1;
 }
 else
 {
       L->probe++;
  L->tab[L->probe] = X;
 }
 return 0;
  }
/****************************************************************
函数功能:向顺序表尾部删除数据                       
输入参数:  顺序表的对象表
返回值:  顺序的表的标头指针 
作者:HFL 
时间:2013-12-12
 *****************************************************************/ 
 #ifdef TRIDiTION
  struct INT32 Delete_I_Seqlist( struct SeqList * L ,INT32 i)
#else
  INT32 Delete_I_Seqlist(SeqList * L,INT32 i)
#endif 
  {   
 INT32 temp;
 if (i<=-1 || i>=MAX)
 {
 Log("sorry!The I Position is illgeal!\n");
 return -1;
 }
 
 if(L->probe==-1 )
 {
 Log("sorry!The SeqListb is NULL!\n");
 return -1;
 }
 else
 {
 for(temp=i;temp<L->probe;temp++)
   L->tab[temp]=L->tab[temp+1];
       L->probe--;
 }
   
 return L->probe;
  }
/****************************************************************
函数功能:向顺序表尾部删除数据                       
输入参数:  顺序表的对象表
返回值:  顺序的表的标头指针 
作者:HFL 
时间:2013-12-12
 *****************************************************************/ 
 #ifdef TRIDiTION
  struct INT32 Delete_Seqlist( struct SeqList * L )
#else
  INT32 Delete_Seqlist(SeqList * L)
#endif 
  {   
 if(L->probe==-1)
 {
 Log("sorry!The SeqListb is NULL!\n");
 return -1;
 }
 else
 {
    L->probe--;
 }
   
 return L->probe;
  }
  /****************************************************************
函数功能:遍历顺序表                       
输入参数:  顺序表的对象表
返回值:  成功:0 ;失败:-1
作者:HFL 
时间:2013-12-12
 *****************************************************************/ 
 #ifdef TRIDiTION
  INT32 List_Seqlist( struct SeqList * L )
#else
  INT32  List_Seqlist(SeqList * L)
#endif 
  {   
 INT32 Last = L->probe;
 if(Last==-1)
 {
 Log(" sorry!The SeqListb is NULL!\n");
 return -1;
 }
 else
 {
 
while(-1!=Last)
{
Log( "the Nume%d is %d\n",Last, L->tab[Last]);
Last--;
}
 }
 
 return 0;
  }


 /****************************************************************
函数功能:从顺序表查找一个元素                       
输入参数:  顺序表的对象表
返回值:   成功:0,失败为:-1 
作者:HFL 
时间:2013-12-12
 *****************************************************************/ 
 #ifdef TRIDiTION
  INT32 Seach_Seqlist( struct SeqList * L,UINT32 X )
#else
  INT32 Seach_Seqlist(SeqList * L,UINT32 X)
#endif 
  {   
 UINT32 i = L->probe ; //再引入一个标志,probe指针作为顺便表指针,不能动它,否则顺序表就动了。
 if(i ==-1)
 {
 Log(" sorry!The SeqListb is NULL!\n");
 return -1;
 }
 else
 {  
 while(-1!=i)
 {
if( X==L->tab[i])
{
Log("The data is seached now!the %d is the %d position \n",X,i);
  return L->probe;
}
// Log("L->tab[L->probe]=%d\t",L->tab[L->probe]);
           i --;
 }
    Log("The data is can't find!\n");
return -1;
 }
 
  }


void main()

INT32 i = 0,Ret = -1;
#ifdef TRIDiTION
struct SeqList * L = NULL;
#else
SeqList * L = NULL;
    #endif
    Log("*******************************\n");
Log("*                             *\n");
Log("*   Init seqlist is start !   *\n");
Log("*                             *\n");
Log("*******************************\n");
L= Init_Seqlist();
if (!L)
{
Log( "Init_seqlist is failed!\n");
}
else
{
Log("Init_seqlist is succsessed! \n");
}
Log("*******************************\n");
Log("*                             *\n");
Log("*   setup seqlist is start !  *\n");
Log("*                             *\n");
Log("*******************************\n");
  
for(i=0; i<MAX-1; i++)//建立Max-1个元素的顺序表
{
if( Insert_Seqlist(i+2,L) )
{
Log("Insert data is failed \n");
}
else
{
Log("Insert data[%d] is successed\n",i);
}
}
Log("*******************************\n");
Log("*                             *\n");
Log("*   List seqlist is start !   *\n");
Log("*                             *\n");
Log("*******************************\n");
if( List_Seqlist(L))
{
Log("List data is failed \n");
}
else
{
Log("List Data is successed\n",i);
}
    Log("*******************************\n");
Log("*                             *\n");
Log("*   Search seqlist is start ! *\n");
Log("*                             *\n");
Log("*******************************\n");
Ret = Seach_Seqlist(L,6);
if(-1 == Ret)
{
Log( "sorry ,List data is failded\n");
}
else
{
Log( "hi ,List data is secusssed,the position is %d\n",Ret);
}
Log("*******************************************\n");
Log("*                                         *\n");
Log("*Insert into I position seqlist is start !*\n");
Log("*                                         *\n");
Log("*******************************************\n");
   Ret = Insert_Into_I_Seqlist(999,L,0);
   if(-1 == Ret)
{
Log( "sorry ,Insert i position data is failded\n");
}
else
{
Log( "hi ,Insert i position data is secusssed\n");
}
if( List_Seqlist(L))
{
Log("List data is failed \n");
}
else
{
Log("List Data is successed\n",i);
}
Log("*******************************************\n");
Log("*                                         *\n");
Log("*        Delete seqlist is start !        *\n");
Log("*                                         *\n");
Log("*******************************************\n");
   Ret = Delete_Seqlist(L);
   if(-1 == Ret)
{
Log( "sorry ,Delete data is failded\n");
}
else
{
Log( "hi ,Delete data is secusssed\n");
}
if( List_Seqlist(L))
{
Log("List data is failed \n");
}
else
{
Log("List Data is successed\n",i);
}
    Log("*******************************************\n");
Log("*                                         *\n");
Log("*    Delete I Date seqlist is start !     *\n");
Log("*                                         *\n");
Log("*******************************************\n");
Ret =Delete_I_Seqlist(L,4);
if(-1 == Ret)
{
Log( "sorry ,Delete I data is failded\n");
}
else
{
 Log( "hi ,Delete I data is secusssed\n");
}
if( List_Seqlist(L))
{
Log("List data is failed \n");
}
else
{
Log("List Data is successed\n",i);
}


Log("*******************************************\n");
Log("*                                         *\n");
Log("*    destroy  seqlist is start !          *\n");
Log("*                                         *\n");
Log("*******************************************\n");
while(-1!=L->probe)
{
 Delete_Seqlist(L);
}

if( List_Seqlist(L))
{
Log("List data is failed \n");
}
else
{
Log("List Data is successed\n",i);
}

Log("*******************************************\n");
Log("*                                         *\n");
Log("*       free  seqlist is start !          *\n");
Log("*                                         *\n");
Log("*******************************************\n");
Uninit_Seqlist(L);
}
0 0
原创粉丝点击