顺序表的创建和基本操作

#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版权协议,转载请附上原文出处链接和本声明。