先创建了这三个文件:
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;
}
}