您的位置:首页 > 理论基础 > 数据结构算法

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

2014-01-04 19:48 387 查看
/****************************************************************

文件内容:线性表之顺序表操作

版本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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: