顺序表(C语言实现)

#include<stdio.h>
#include<stdbool.h>
#define MaxSize 20
typedef int DataType;
typedef struct
{
    DataType data[MaxSize];
    int length;
    
}SqList;

void Init_List(SqList * L, int DataType[], int n);        //    顺序表初始化 
bool Insert_List(SqList * L, int pos, int x);             //    顺序表插入 
bool Delete_List(SqList * L, int pos, int * x);           //    顺序表删除 
bool Empty_List(SqList * L);                              //    判空 
bool Full_List(SqList * L);                               //    判满 
int Locate_List(SqList * L, int x);                       //    按值查找 
bool Get_List(SqList * L, int pos, int * x);              //    按位查找 
int Length_List(SqList *L);                               //    顺序表长度 
void Traverse_List(SqList * L);                           //    遍历线性表 

int main()
{
    SqList L;                            
    int x,val;
    int a[8] = {12,32,43,55,34,76,81,59};    //    定义数组 
    
    Init_List(&L, a, 8);
    printf("\n遍历顺序表:");    
    Traverse_List(&L);                
    printf("\n线性表长度:%d\n",Length_List(&L));                    

    if(Insert_List(&L, 1, 80))
    { 
        printf("\n插入成功!\n");
        printf("插入的元素:80\n") ;
        printf("位置:第1个位置\n");
    } 
    else
        printf("\n插入失败!\n");
    printf("遍历顺序表:");    
    Traverse_List(&L);    
    
    Delete_List(&L, 2, &val);     
    printf("\n删除的元素:%d\n",val);
    printf("位置:第2个位置\n");
    printf("遍历顺序表:");    
    Traverse_List(&L);    
    
    if(Locate_List(&L, 55))
    {
        printf("\n按值查找成功!\n");
        printf("查找的元素是:55\n");
         printf("位置:第%d个位置\n",Locate_List(&L, 55));
     }
    else
        printf("\n按值查找失败\n");
        
    if(Get_List(&L, 2, &x))
    {
        printf("\n按位查找成功\n");
        printf("位置:第2个位置\n");
    }
    else
        printf("\n按位查找失败!\n");
        printf("您查找的元素为:%d\n",x);
    
    printf("\n遍历顺序表:");
    Traverse_List(&L);
    
    return 0;
}

void Init_List(SqList * L, int DataType[], int n)
{
    int i;
    if(n>MaxSize)
        printf("存储空间不足!\n");
        
    for(i=0; i<n; ++i){
        L->data[i] = DataType[i];
    }
    L->length = n;
    
    return;
}

bool Insert_List(SqList * L, int pos, int x)
{
    int i;
    
    if(Full_List(L))
        return false;
        
    if(pos<1||pos>L->length+1)
        return false;
        
    for(i=L->length; i>=pos; i--)
        L->data[i] = L->data[i-1];
    
    L->data[pos-1] = x;
    L->length++;
    
    return true;    
}

bool Delete_List(SqList * L, int pos, int * val)
{
    int i;
    
    if(Empty_List(L))
        return false;
        
    *val = L->data[pos-1];
    for(i=pos; i<L->length; ++i)
        L->data[i-1] = L->data[i];
        
    L->length--;
    return true;
}

bool Empty_List(SqList * L)
{
    if(L->length==0)
        return true;
    else
        return false;
}

bool Full_List(SqList * L)
{
    if(L->length==MaxSize)
        return true;
    else
        return false;
}

int Locate_List(SqList * L, int x)
{
    int i;
    
    for(i=0; i<L->length; ++i)
    {
        if(x==L->data[i])
        return i+1;
    }
    
    return 0;
}

bool Get_List(SqList * L, int pos, int * x)
{
    int i;
    
    if(pos<1||pos>L->length)
        return false;
        
    *x = L->data[pos-1];
    
    return true;
}

int Length_List(SqList *L)
{
    return L->length;
}

void Traverse_List(SqList * L)
{
    int i;
    
    for(i = 0; i<L->length; ++i)
        printf("%3d", L->data[i]);
        
    printf("\n");
    
    return;
}

猜你喜欢

转载自blog.csdn.net/Mr_Morgans/article/details/120977038