主函数相对简陋,大家参考其余函数即可,欢迎补充与讨论。
编译软件为vs2022
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define maxline 100//顺序表最大储存的空间//
//构建顺序表//
typedef struct sqlist{
int data[maxline];
int length;
}sqlist;
//初始化,令其长度为零
void InitList(sqlist*l)//在函数声明时定义指针l指向listl//
{
l->length = 0;
}
//判断顺序表是否为空//
int emptylist(sqlist*l)
{
if (l->length == 0)
return 0;//若长度为零返回0
else
return 1;//长度不为零返回1
}
//建立顺序表//
void bulidlist(sqlist* l, int a[], int num) {//函数声明中int a[]等价于int *a,都被解释为指向数组首元素的指针
if (num > maxline)
{
printf("超出长度限制\n");
}
for (int i = 0; i < num; i++) {
l->data[i] = a[i];
l->length++;
}
//l->length = num;
}
//删除操作//
int Delete(sqlist* l, int k)
{
if (l->length == 0)
{
printf("发生下溢错误,即将要访问顺序表之前的地址.\n");
return 0;
}
if (k > l->length || k < 1)
{
printf("删除位置错误!\n");
return 0;
}
int e = l->data[k - 1];//把要删除的数据返回
printf("被删除的为第 %d 个元素 %d\n", k, e);
for (int j = k; j < l->length; j++)
{
l->data[j - 1] = l->data[j];
}
l->length--;
return 1;
}
//遍历输出//
void printlist(sqlist* l){
for (int i = 0; i <l->length;i++)
{
printf("%d", l->data[i]);
}
printf("\n");
}
//插入操作//
int ListInsert(sqlist* l, int w, int x)
{
if (l->length > maxline)
{
printf("数据溢出\n");
return 0;
}
if (w<1 || w>l->length)
{
printf("插入位置非法\n");
return 0;
}
for (int k = l->length-1; k >= w-1; k--)
{
l->data[k+1] = l->data[k];
}
l->data[w] = x;
l->length++;
return 1;
}
/*修改操作*/
int Modify(sqlist* l, int i, int x)
{
if (i > l->length || i < 1)
{
printf("位置错误!\n");
return 0;
}
l->data[i] = x;
return 1;
}
/*按位查找*/
int Get(sqlist* l, int g)
{//若查找成功,返回值
if (g <1 || g>l->length) {
printf("查找位置非法,查找错误\n");
return 0;
}
else
{
printf("%d",l->data[g-1]);
return 1;
}
}
int main()
{
int a[maxline];
int num;
printf("请输入元素个数");
scanf("%d", &num);
printf("请依次输入数字");
for (int i = 0; i < num; i++)
{
scanf("%d", &a[i]);
}
sqlist listl;
InitList(&listl);//将listl的地址传给*l//
if ((emptylist(&listl)) != 1)//长度为零返回0;不为零返回1;
printf("顺序表初始化成功\n");
else{
printf("顺序表初始化失败\n");
exit(1);
}
bulidlist(&listl, a, num);//在函数调用时,数组名a会被解释为数组的首地址,即&a[0]//
printlist(&listl);//遍历输出//
int w, x;
printf("请输入插入的位置和数字\n");
scanf("%d %d", &w, &x);
ListInsert(&listl,w,x);//在w位置插入x;
printlist(&listl);//遍历输出//
int k;
printf("请输入删除元素的位置\n");
scanf("%d", &k);
Delete(&listl,k);//按位删除
printlist(&listl);//遍历输出//
int g;
printf("请输入查找元素的位置\n");
scanf("%d", & g);
Get(&listl, g);//按位查找
int flag, z;
printf("请输入修改的位置和元素\n");
scanf("%d %d", &flag, &z);
Modify(&listl, flag, z);
printlist(&listl);//遍历输出//
return 0;
}