#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<malloc.h>
#define Seqlist_initsize 9
typedef struct Seqlist
{
int capacity; //顺序表容量(上限)
int size; //顺序表存放元素实际数量
int* base; //指向动态内存分配的指针
}Seqlist;
Seqlist* init_list(Seqlist* list) //初始化顺序表需要返回Seqlist* 类型
{
list->capacity = Seqlist_initsize; //初始化容量定为9(宏定义操作)
list->size = 0; //初始化实际存储数量为0
list->base = (int*)calloc(1, sizeof(Seqlist)); //使用calloc给指针分配内存,注意头文件
//list->base 可以作为数组指针,配合list->base[list->size]使用,但只在插入时候这样写
if(list->base == NULL) //创建失败就返回空值结束
{
perror("->顺序表创建失败!\n");
return NULL;
}
return list; //创建成功就返回list指针
}
//初始顺序表
void show_list(Seqlist* list)
{
printf("->打印结果为: \n ");
for (int i = 0; i < list->size; i++)
{
printf("%d ", list->base[i]);
}
printf("\n");
}
//打印顺序表元素
void insert_list(Seqlist *list )
{
int insert_key;
printf("->请输入需要出入的值:\n");
for (int i = 1; i <= list->capacity; i++)
{
scanf("%d", &insert_key);
list->base[list->size] = insert_key; //插入操作,只有这里使用list->size作为数组下标,其他地方不要这样用
list->size++; //插入完成一次,当前数量加1
}
show_list(list);
}
//插入顺序表元素
void delete_list(Seqlist* list)
{
printf("->请输入需要删除的元素:\n");
int delete_key;
int panduan = 1;
scanf("%d",&delete_key);
for (int i = 0; i < list->size; i++)
{
if (delete_key == list->base[i])
{
for (int j = i; j < list->size; j++)
{
list->base[j] = list->base[j + 1]; //覆盖
}
list->size--; //每实现一个if,意味着删除一个,当前数量减1
i--; //这里一定要将i--,重新变回迁移之前的位置,不然会漏掉数据
panduan = 0; //这里的panduan是用来判断是否查找的符合删除条件的值的
}
}
if (panduan)
{
printf("->未能找到需要删除的数据\n");
}
show_list(list);
}
//删除顺序表元素
void find_list(Seqlist* list)
{
int find_key;
int panduan = 1;
printf("->请输入需要查找的元素:\n");
scanf("%d",&find_key);
for (int i = 0; i < list->size; i++)
{
if (find_key == list->base[i])
{
printf("->查找到数据为下标[%d]数据,—— %d \n",i,list->base[i]);
panduan = 0;
}
}
if (panduan)
{
printf("->未能查找到需要查找的数据\n");
}
show_list(list);
}
//查找顺序表元素
void change_list(Seqlist* list)
{
int change_number,change_key;
printf("->请输入需要更改的下标位置:\n");
scanf("%d",&change_number);
printf("->请输入将对应数据更改后的值:\n");
scanf("%d", &change_key);
list->base[change_number] = change_key; //直接改
show_list(list);
}
//更改顺序表元素
int main()
{
Seqlist List; //创建顺序表List
init_list(&List); //顺序表初始化
int choose;
while (1)
{
printf("﹃﹃﹃﹃﹃﹃﹄﹄﹄﹄﹃﹃ \n");
printf(" 1、插入元素 \n");
printf(" 2、删除元素 \n");
printf(" 3、查找元素 \n");
printf(" 4、更改元素 \n");
printf(" 5、打印元素 \n");
printf("﹄﹄﹄﹄﹄﹄﹃﹃﹃﹃﹃﹃ \n");
printf("请输入需要进行操作的选项!\n");
scanf("%d", &choose);
switch (choose)
{
case 1: insert_list(&List); break; //插入元素
case 2: delete_list(&List); break; //删除元素
case 3: find_list(&List); break; //查找元素
case 4: change_list(&List); break; //更改元素
case 5: show_list(&List); break; //打印元素
default:printf("选项输入错误!请重新输入!\n");
break;
}
}
return 0;
}
/*
*提示:看懂后,大胆写!
*/
版权声明:本文为ZL_BKPD原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。