用C语言实现线性表的顺序存储(静态存储)

内容:

  • 建立一个具有5个元素的整数顺序表
  • 查找(位置,值)
  • 插入元素
  • 删除一个元素
  • 销毁 
    #define _CRT_SECURE_NO_WARNINGS 1//方便scanf的使用,防止警告,还可以scanf_s
    #include
    #include
    #include
    #include
    //顺序表的存储结构定义
    #define MaxSize 20//表示Maxsize与20等同,方便我们后面改顺序表的大小
    typedef struct
    {
    	int data[MaxSize];//用来存放顺序表的数据
    	int length;//顺序表的最大长度
    }SeqList;
    //1.初始化顺序表(只需要将长度初始化为0)
    void InitList(SeqList* L)
    {
    	L->length = 0;//将顺序表的最大长度赋值为0
    }
    //2.建立顺序表(建立一个长度为n的顺序表,将数组a[n]中的数据元素赋给顺序表中存放数据元素的数组 data[n])
    int CreatList(SeqList* L, int a[], int n)
    {
    	if (n > MaxSize)//n表示我们要放入数组元素的长度,如果大于我们建立的顺序表最大长度,说明顺序表的空间不够,无法建立顺序表
    	{
    		printf("顺序表的空间不够,无法建立顺序表\n");
    		return 0;
    	}
    	for (int i = 0; i < n; i++)//循环遍历,将数组里的元素放入到顺序表里
    	{
    		L->data[i] = a[i];
    	}
    	L->length = n;//顺序表的长度要变为放入数组的长度
    	return 1;
    }
    //3.求顺序表的长度
    int ListLength(SeqList* L)
    {
    	return L->length;//直接返回顺序表的长度,函数调用后打印出来就行
    }
    //4.遍历操作
    void PrintList(SeqList* L)
    {
    	for (int i = 0; i < L->length; i++)//循环遍历然后打印各个元素就行
    	{
    		printf("%d ", L->data[i]);
    	}
    	puts("");
    }
    //5.按值查找(返回序号,不是下标)
    int Locate(SeqList* L, int x)//x表示我们所需要找的顺序表里面的其中一个值
    {
    	int y = 1;//起到标志的作用,找到我们所需的元素就会标志
    	for (int i = 0; i < L->length; i++)//循环遍历顺序表
    	{
    		if (L->data[i] == x)
    		{
    			y = 1;//找到后就可以标志,其实这也能直接放回i也可以
    		}
    	}
    	if (y == 1)
    		printf("查询成功!\n");
    	else
    	{
    		printf("该表中无此元素\n", x);
    	}
    	return 0;
    }
    //6.按位置查找(第i个元素存储在数组下标为i-1的位置)
    int Get(SeqList* L, int i)//i表示我们所查找的元素位置,注意:数组下标是从0开始的
    {
    	if (i<1 || i>L->length)//表示i的位置不合理
    	{
    		printf("查找位置非法,查找失败\n");
    		return 0;
    	}
    	else//表示位置合法
    	{
    		printf("第%d位的元素是%d\n", i, L->data[i]);
    		return L->data[i];//找到后返回此元素
    	}
    }
    //7.插入操作
    void LIstInsert(SeqList* L, int i, int x)//表示在数组第i为插入元素x
    {
    	if (i<1 || i>L->length + 1)//插入的位置不合理
    	{
    		printf("插入的位置不合理插入失败\n");
    	}
    	if (L->length >= MaxSize)//说明我们建立的顺序表的最大长度不够
    	{
    		printf("表已经满了,插入失败\n");
    	}
    
    	for (int j = L->length; j >= i; j--)//从后往前查找
    	{
    		L->data[j] = L->data[j - 1];//每找一位就往后移一位
    	}
    	L->data[i] = x;//插入元素
    	L->length++;//因为多插入了一位元素,顺序表的长度应该加一
    	printf("插入成功\n");
    }
    //8.删除操作i>=1或者i<=L->length)
    void ListDelete(SeqList* L, int i, int* data)//表示删除第i位元素
    {
    	if (L->length == 0)//说明此顺序表是一个空表,没有元素
    	{
    		printf("表为空,删除失败\n");
    	}
    	if (i<1 || i>L->length)//表示删除的位置不合理
    	{
    		printf("删除的位置不合理,删除失败\n");;
    	}
    	*data = L->data[i - 1];
    	for (int j = i; j < L->length; j++)//循环遍历,因为删除了一个元素,的把删除元素后的剩下元素前移
    	{
    		L->data[j - 1] = L->data[j];
    	}
    	L->length--;//删除了一个元素,顺序表的长度减一
    	//free(*data);//释放删除的这个元素的空间
    }
    //9.判空操作
    int EmptyList(SeqList* L)
    {
    	if (L->length == 0)//如果顺序表的长度为0,说明是一个空表
    	{
    		return 1;
    	}
    	return 0;
    }
    //10.销毁顺序表(顺序表是静态存储分配,无需销毁)
    int main()
    {
    	int a[5] = { 1,2,3,4,5 };//我们建立的一个长度为5的数组,你们可以自己随机建立,只要不超过我们设立的顺序表的最大长度就行
    	int i;//建立的局部变量,后面用来存放删除元素
    	SeqList L;//申请建立一个顺序表
    	InitList(&L);//给顺序表初始化
    	if (EmptyList(&L))//判断是否成功初始化
    	{
    		printf("初始化顺序表成功!\n");
    	}
    	printf("给顺序表赋值:1,2,3,4,5\n遍历并输出顺序表:\n");
    	CreatList(&L, a, 5);//将我们建立的数组元素放入申请的顺序表里面
    	printf("当前顺序表的数据为:");
    	PrintList(&L);//打印此时的顺序表
    	Locate(&L, 4);//按值查找元素4的位置
    	PrintList(&L);
    	Get(&L, 3);//按位查找元素3
    	PrintList(&L);
    	printf("在第三位后插入666:\n");
    	LIstInsert(&L, 3, 666);//在顺序表第三位插入666
    	ListLength(&L);
    	PrintList(&L);
    	printf("删除第三位\n");
    	ListDelete(&L, 4, &i);//删除顺序表的第四位
    	PrintList(&L);
    }
    

    运行结果:用C语言实现线性表的顺序存储(静态存储)_第1张图片

  • 解释全在代码里了,如有不懂,欢迎留言!!!

你可能感兴趣的:(c语言,数据结构,开发语言)