顺序表及其操作

 一、顺序表的概念

采用顺序存储的方式存储的线性表就称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

顺序表的存储结构:

#define Maxsize 100
typedef int datatype;
typedef struct 
{
    datatype a[Maxsize];
    int size;
}sequence_list;

 

 二、顺序表的操作集合

//void init(sequence_list *slt)
//void append(sequence_list *slt,datatype data)
//void insert(sequence_list *slt,datatype x,int position) 
//void dele(sequence_list *slt,int position)
//int empty(sequence_list slt)
//int find(sequence_list slt,int data)
//int get(sequence_list slt,int position)
//void print(sequence_list slt)

 

 三、顺序表代码实现

 顺序表的初始化

/***************************************/
/* 函数名:init                         */
/* 函数功能:顺序表的初始化——置空表         */
/* 函数参数:slt顺序表指针                */
/* 函数返回值:null                      */
/**************************************/
void init(sequence_list *slt)
{
    slt->size=0;
}

 

 顺序表的尾部插入

/***************************************/
/* 函数名:append                       */
/* 函数功能:顺序表的尾部插入              */
/* 函数参数:slt被插入的顺序表指针         */
/*          x插入的值                  */
/* 函数返回值:null                     */
/**************************************/
void append(sequence_list *slt,datatype x)
{
    if(slt->size==Maxsize)
        {printf("顺序表已满!\n");return;}
    slt->a[slt->size]=x;
    slt->size++;
}

 

顺序表的插入

/***************************************/
/* 函数名:insert                       */
/* 函数功能:顺序表的插入操作              */
/* 函数参数:slt待插入的顺序表指针         */
/*          x插入的值                  */
/*          position插入的位置         */
/* 函数返回值:null                     */
/**************************************/
void insert(sequence_list *slt,datatype x,int position) 
{
    int i;
    if( position<0 || position>slt->size )
        {printf("指定的插入插入位置不存在!\n");return;}
    if(slt->size == Maxsize)
        {printf("顺序表已满,无法插入!\n");return;}
    for(i=slt->size;i>position;i--)    
        slt->a[i]=slt->a[i-1];
    slt->a[position]=x;
    slt->size++;
}

 

顺序表的删除

/**************************************/
/* 函数名:delete                       */
/* 函数功能:顺序表的删除                 */
/* 函数参数:slt顺序表指针                */
/*          position待删除位置         */
/* 函数返回值:null                     */
/**************************************/
void dele(sequence_list *slt,int position)
{
    int i;
    if(slt->size == 0)
        {printf("顺序表为空,无法删除!\n");return;}
    if(position<0 || position>=slt->size)
        {printf("指定的删除位置不存在!");return;}
    for(i=position;i<slt->size;i++)
        slt->a[i]=slt->a[i+1];
    slt->size--;
} 

 

 判断顺序表是否为空

/**************************************/
/* 函数名:empty                       */
/* 函数功能:判断顺序表是否为空           */
/* 函数参数:slt顺序表                  */
/* 函数返回值:int。1空  0非空           */
/* 文件名:sequlist.h    函数名:empty   */
/*************************************/
int empty(sequence_list slt)
{
    return (slt.size==0? 1:0);
}

 

 按值查找结点位置

/************************************************/
/* 函数名:find                                   */
/* 函数功能:查找顺序表中值为x的结点位置              */
/* 函数参数:slt待查找顺序表                        */
/*          x查找值                             */
/* 函数返回值:int。返回x值的位置,-1表示没找到       */
/***********************************************/
int find(sequence_list slt,int x)
{
    int i=0;
    while( i<slt.size && slt.a[i]!=x )
        i++;
    if(i<slt.size)
        return i;
    else
        return -1;
}

 

 按位查找节点值

/*************************************************/
/* 函数名:get                                     */
/* 函数功能:查找顺序表中第i个结点值                   */
/* 函数参数:slt待查找顺序表                         */
/*          i查找位置                             */
/* 函数返回值:int。返回第i个结点值,-1表示没找到       */
/*************************************************/
int get(sequence_list slt,int position)
{
    if(position<0 || position>slt.size){
        printf("指定位置的结点不存在\n");
        return -1;
    } 
    return slt.a[position];
}

 

 打印顺序表

/****************************************/
/* 函数名:print                         */
/* 函数功能:打印顺序表                    */
/* 函数参数:slt顺序表                    */
/* 函数返回值:null                      */
/***************************************/
void print(sequence_list slt)
{
    int i;
    if(!slt.size)
        printf("顺序表为空!\n");
    else
        for(i=0;i<slt.size;i++)
            printf("%d ",slt.a[i]);
}

 

φ(゜▽゜*)♪ 感谢观看,希望对你有帮助!

 

posted @ 2022-11-18 11:10  Mr_宋先生  阅读(67)  评论(0编辑  收藏  举报