c语言(结构体)实现顺序表

先创建了这三个文件:在这里插入图片描述
SeqList.h头文件是用来声明,Main.cpp文件是主函数文件,SeqList.cpp是用来实现函数。
SeqList.h代码如下:

#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#define SEQLIST_INIT_SIZE 8  // 容量大小,可以自己设置
typedef int ElemType;
typedef struct SeqList
{
	ElemType* base; // 指向顺序表的首地址
	int   capaticy; // 顺序表的容量
	int   size; // 顺序表里面元素个数,从第0个开始
}SeqList;
void InitList(SeqList* list);  // 初始化线性表
void Put_end(SeqList* list,ElemType num); // 在线性表的末尾添加元素
void show_SeqList(SeqList* list); // 显示线性表
bool ListEmpty(SeqList* list); // 判断线性表是否为空
void ListLength(SeqList* list); // 显示线性表的元素个数
void GetElem(SeqList* list,int i); // 查看第i个元素
void put_front(SeqList* list,ElemType x); // 从最前端插入元素
void delect_pos(SeqList* list, int x); // 删除x位置的值
void ListInsert(SeqList* list, int x,ElemType num);//在x位置插入元素num
void sort_list(SeqList* list); // 排序
void reserve_list(SeqList* list); // 逆置
#endif // !_SEQLIST_H_

Main.cpp代码如下:其他功能后续加上

#include"SeqList.h"
int main()
{
	SeqList mylist;
	// 初始化列表
	InitList(&mylist);
	ElemType select;
	ElemType num;
	while (true)
	{
		printf("***********************************************************\n");
		printf("** [1]   Put_end                     [2]show_Seqlist\n");
		printf("** [3]   ListEmpty                   [4]ListLength\n");
		printf("** [5]   GetElem                     [6]put_front\n");
		printf("** [7]   delect_pos                  [8]ListInsert\n");
		printf("** [9]   sort_list                   [10]reserve_list\n");
		printf("** [0] SystemExit\n");
		printf("**************************************************************\n");
		printf("请选择>:");
		scanf_s("%d", &select);
		if (select == 0)
		{
			break;
		}
		switch (select)
		{
		case 1:  // 在表的末尾添加元素
			printf("请输入要放入的数据(-1为结束标志):\n");
			while (scanf_s("%d", &num),num != -1) // 逗号表达式
			{
				Put_end(&mylist,num);
			}
			break;
		case 2: // 显示顺序表
			show_SeqList(&mylist);
			break;
		case 3: // 判断线性表是否为空,如果为空,则返回1,不为空,返回0
			printf("%d\n",ListEmpty(&mylist));
			break;
		case 4:
			ListLength(&mylist);
			break;
		case 5:
			if (ListEmpty(&mylist))
			{
				printf("顺序表为空,无法查看元素\n");
			}
			else
			{
				ElemType x;
				printf("你想查看第几号:");
				scanf_s("%d",&x);
				GetElem(&mylist, x);
			}
			break;
		case 6:// 从最前面放入元素,不过一次性只能插入一个数
			printf("请输入你要从最前面插入的元素:");
			ElemType x;
			scanf_s("%d", &x);
			put_front(&mylist,x);
			break;
		case 7:
			printf("请输入要删除位置:");
			scanf_s("%d",&num);
			delect_pos(&mylist, num);
			break;
		case 8:
			printf("请输入要插入的元素位置和数字");
			int y;
			scanf_s("%d%d", &y, &num);
			getchar();
			ListInsert(&mylist,y,num);
			break;
		case 9:
			sort_list(&mylist);
			break;
		case 10:
			reserve_list(&mylist);
			break;
		default:
			printf("输入错误,请重新选择:\n");
			break;
		}
	}
	return 0;
}

SeqList.cpp代码如下:

#include"SeqList.h"
// 初始化列表
void InitList(SeqList* list)
{
	list->base = (ElemType*)malloc(sizeof(ElemType) * SEQLIST_INIT_SIZE);
	assert(list->base != NULL);
	list->capaticy = SEQLIST_INIT_SIZE;
	list->size = 0;
}
// 从尾部放入数据
void Put_end(SeqList* list,ElemType num)
{
	if (list->size >= list->capaticy)
	{
		printf("顺序表已经满了(最多只能放8个)!!,无法再放入数据");
	}
	else
	{
		list->base[list->size] = num;
		list->size++;
	}
}
// 显示顺序表
void show_SeqList(SeqList *list)
{
	if (list->size == 0) {
		printf("此顺序表为空,按1输入\n");
	}
	else
	{
		for (int i = 0;i < list->size; i++)
		{
			printf("%4d", list->base[i]);
		}
	}
	printf("\n");
}
// 判断顺序表是否为空
bool ListEmpty(SeqList* list)
{
	if (list->size == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}
  // 显示线性表的元素个数
void ListLength(SeqList* list)
 {
	 printf("线性表元素个数为:%d\n", list->size);
 }
// 查看第i个元素
void GetElem(SeqList* list, int i)
{
	if (i > list->size)
	{
		printf("没有对应的元素\n");
	}
	else
	{
		printf("第%d号元素为%d\n",i,list->base[i-1]);
	}
	
}
// 从头部放入元素
void put_front(SeqList* list, ElemType x)
{
	if (list->size >= list->capaticy)
	{
		printf("顺序表已经满了(最多只能放8个)!!,无法再放入数据");
	}
	else
	{
		for (int i = list->size;i > 0; i--)
		{
			list->base[i] = list->base[i - 1];
		}
		list->base[0] = x;
	}
	list->size++;
}
// 删除某个位置的值
void delect_pos(SeqList* list, int x)
{
	if (x > list->size || x < 0 || list->size == 0)
	{
		printf("非法,无法插入\n");
	}
	else
	{
		for (int i = x - 1;i < list->size; i++)
		{
			list->base[i] = list->base[i + 1];
		}
	}
	list->size--;
}
// 在x(0开始)位置插入num元素
void ListInsert(SeqList* list, int x, ElemType num)
{
	if (x < 0 || x > list->size - 1 || list->size == 0 || list->size == list->capaticy)
	{
		printf("非法,无法插入");
		return;
	}
	else
	{
		for (int i = list->size-1;i >= x;i--)
		{
			list->base[i + 1] = list->base[i];
		}
		list->base[x] = num;
		list->size++;
	}
}
// 从小到大排序(冒泡排序)
void sort_list(SeqList* list)
{
	ElemType temp;
	for (int i = 0;i < list->size;i++)
	{
		for (int j = 0;j < list->size - i - 1;j++)
		{
			if (list->base[j] > list->base[j + 1])
			{
				temp = list->base[j];
				list->base[j] = list->base[j + 1];
				list->base[j + 1] = temp;
			}
		}
	}
}
// 顺序表的逆置
void reserve_list(SeqList* list)
{
	int j = list->size - 1;
	for (int i = 0;i < j;i++,j--)
	{
		ElemType temp = list->base[i];
		list->base[i] = list->base[j];
		list->base[j] = temp;
	}
}

还请路过的大神指教

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值