Julia999 发表于 2019-9-17 13:37:32

顺序表的操作完整代码(c语言)

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define maxsize 100//定义顺序表的最大储存个数是100
typedef int ElemType;

//定义顺序表的结构,并用ElemType的数组来储存数组元素,并且元素的个数为length
typedef struct
{
        ElemType data;
        int length;
}List;

//建立顺序表(定义一个函数建立顺序表,将数组a的元素给顺序表)
void creatList(List*& L, ElemType a[], int n)
{
        int length = 0;
        L = (List*)malloc(sizeof(List));
        for (int i = 0; i < n; i++)
        {
                L->data = a;
                length += 1;
        }
        L->length = length;
}

//初始化顺序表
void initList(List*& L)
{
        L = (List*)malloc(sizeof(List));//给顺序表L分配空间
        L->length = 0;   //定义L的长度length为0
}

//销毁顺序表
void destroyList(List*& L)
{
        free(L);//释放顺序表L的空间
}

//判断顺序表是否为空
bool listEmpty(List*& L)
{
        return(L->length == 0);//若为空,返回true,如果不为空,返回false
}

//求线性表的长度
int ListLength(List*& L)
{
        return (L->length);
}

//输出线性表
void outputList(List*& L)
{
        if (listEmpty(L))//如果顺序表为空
        {
                printf("顺序表为空!\n");
                return;
        }
        else//否则逐个输出元素
        {
                for (int i = 0; i < L->length; i++)
                {
                        printf("%d ", L->data);
                }
                printf("\n");
        }
}

//取顺序表中某个位置的元素
void GetElem(List*& L, int i, int& e)//在线性表L中取第i位置的值并给e
{
        if (i < 0 || i > L->length || L->length == 0)//如果i不合法或者L为空
        {
                printf("顺序表为空!\n");
                return;
        }
        else
        {
                e = L->data;
        }
}

//判断顺序表中是否存在某个元素,并返回所在位置
void LocateElem(List*& L, ElemType e)
{
        for (int i = 0; i < L->length; i++)
        {
                if (e == L->data)
                {
                        printf("位置在%d处\n", i + 1);
                        return;
                }
        }       
}

//插入元素(在线性表的第i个位置插入元素e)
void ListInsert(List*& L, int i, ElemType e)
{
        if (i<0 || i>L->length + 1)//如果i不合法
        {
                printf("输入位置不合法!\n");
                return;
        }
        else
        {
                for (int j = L->length-1; j >= i-1; j--)
                {
                        L->data = L->data;
                }
                L->data = e;
                L->length += 1;
        }
}


//删除元素
void ListDelete(List*& L, int i)//在顺序表中删除第i个元素
{
        if (i<0 || i>L->length)
        {
                printf("删除位置不合法!\n");
                return;
        }
        else
        {
                for (int j = i-1; j < L->length; j++)
                {
                        L->data = L->data;
                }
                L->length -= 1;
        }
}

int main()
{
        List *L;
        int e=99;
        int a = { 0,1,2,3 };
        creatList(L, a, 4);
        //initList(L);
        outputList(L);
        printf("该顺序表的长度是%d\n", ListLength(L));
        //取线性表某个位置的值
        GetElem(L, 1, e);
        printf("取出来的值是:%d\n", e);

        //判断是否有某个元素
        LocateElem(L, 1);

        //插入
        ListInsert(L, 10, 100);
        ListInsert(L, 2, 100);
        outputList(L);

        //删除
        ListDelete(L, 1);
        outputList(L);

        //销毁
        destroyList(L);
        outputList(L);
       
        return 0;
}

页: [1]
查看完整版本: 顺序表的操作完整代码(c语言)