这篇博客采用纯c语言完成数据结构顺序表的
增删改查几个基本操作
当作是自己每一次学习后的小总结
下面po代码!!
(每个注释都很详细,应该可以理解鸭)
#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE 20
typedef struct
{
int* elem;
int length;
int LiseSize;
}SqList;
//给顺序表赋值
void fuzhi(SqList* l)// SqList* l这里说明一下,这里设定形式参数为指针,即一个地址
//下面调用函数的实参为&l也是一个地址(结构体l的地址),数据形式相同,这种写法叫做”参数传递指针“
//严蔚敏版本教材是类c语言不是纯c,所以她写的SqList &l是c++的引用&符号,在c编译器里无法通过
{
int length;
printf("请给顺序表赋值:\n");
printf("你要输入几个数据:\n");
scanf("%d", &length);
printf("请依此输入这几个元素:\n");
for(int i=0;i<length;i++)
scanf("%d", &l->elem[i]);
l->length = length;
}
//插入数据函数
void InsertList(SqList* l,int i,int elem)
{
for(int j=l->length;j>=i;j--)
{
l->elem[j+1] = l->elem[j];
}
l->length++;
l->elem[i] = elem;
}
//删除顺序表元素
void DeleteList(SqList* l,int i)
{
for(int j=i;j<=l->length;j++)
l->elem[j] = l->elem[j+1];
l->length--;
}
//修改元素的值
void AlterElement (SqList*l,int i,int elem)
{
l->elem[i-1] = elem;
}
//查找数据
int SearchElement(SqList* l, int elem)
{
int location;
for(int i=0;i<l->length;i++)
if(l->elem[i] == elem)
{
location = i+1;
return location;//有的话就返回loccation的数值,若已经return了就等于break立刻结束函数调用,不会再执行return -1了!!
}
return -1; //没有找到元素就返回值-1
}
//打印顺序表
void PrintList (SqList* l)
{
printf("操作后的线性表为:\n");
for(int i=0;i<l->length;i++)//坑!!这里i<length记得要加上l.才能让遍历相应增加
printf("%d ",l->elem[i]);
}
//主函数
int main()
{
SqList l;
l.elem = (int*)malloc(LISTSIZE*sizeof(int));//如果没有这句话为线性表分配空间,则scanf永远只能输入一个数就结束
l.LiseSize = LISTSIZE;
fuzhi(&l);
PrintList(&l);
//插入数据函数
printf("\n输入你要插入的位置和插入的数据值:\n");
int insert_a,insert_b;
scanf("%d%d",&insert_a,&insert_b);
InsertList(&l,insert_a-1,insert_b);
PrintList(&l);
//删除元素
int delete;
printf("\n输入你要删除的数据位置:\n");
scanf("%d",&delete);
DeleteList(&l,delete-1);
PrintList(&l);
//修改元素
int Alter_a,Alter_b;
printf("\n输入你要修改的数据位置和修改的数值:\n");
scanf("%d%d", &Alter_a,&Alter_b);
AlterElement(&l,Alter_a,Alter_b);
PrintList(&l);
//查找数据
int search;
printf("请输入你要查找的数据的值:\n");
scanf("%d",&search);
int index = SearchElement(&l,search);
if (index + 1)
printf("您要找的数据的位置为第%d个\n", index);
else
printf("抱歉,您要查找的数据不存在哦\n");
}