菜单是对顺序表的操作顺序,是根据鲍老师的课程进行学习的
鲍松山https://space.bilibili.com/579985088
目录
主程序main
//源文件负责函数的实现 //源文件、主程序全要引入头文件 #include"SeqList.h" //进行结构的实现 void InitSeqList(SeqList *list) { //base capacity size //在C语言中malloc进行开辟空间 申请内存 //(元素类型)malloc(元素大小)* 表的大小 assert=考虑是否有内存 //引入的函数需要在头文件中引用声明 list->base = (ElemType *)malloc(sizeof(ElemType) * SEQLIST_INIT_SIZE); assert(list->base != NULL); //assert(list->base != NULL); list->capacity = SEQLIST_INIT_SIZE; list->size = 0; } //声明之后要在源文件进行 实现 尾部插入函数 //前提要size<容量 //x是指表的大小 1 2 3 .... void push_back(SeqList *list,ElemType x) { if(list->size >= list->capacity ) { printf("顺序表空间已满,不能尾部插入。\n"); return ; } list->base[list->size] = x; //size所在位置是下标,指针-->大小+1 list->size++; } //头部插入 加入数据前要先判断表中空间是否还能加入数据,看内存 void push_front(SeqList *list,ElemType x) { if(list->size >= list->capacity ) { printf("顺序表空间已满,不能头部插入。\n"); return ; } for(int i=list->size;i>0; --i) { list->base[i] = list->base[i-1]; } list->base[0] = x; list->size++; } //进行显示顺序表 对函数的实现 void show_list(SeqList *list) { for(int i=0; i< list->size; ++i) { printf("%d ",list->base[i]); } printf("\n"); } //尾部删除 删除数据前应先判断表中是否有数据 void pop_back(SeqList *list) { if(list->size == 0) { printf("顺序表为空,不能尾部删除数据\n"); return; } list->size--; } //头部删除 void pop_front(SeqList *list) { if(list->size == 0) { printf("顺序表为空,不能头部删除数据\n"); return; } for(int i=0; i<list->size-1;++i) { list->base[i] = list->base[i+1]; } list->size--; }
源文件cpp
//主程序--调用/测试数据结构
//源文件、主程序全要引入头文件
#include"SeqList.h"
//开始编写测试框架
int main()
{
SeqList mylist;
//结构初始化-->头文件声明
InitSeqList(&mylist);
//对线性表的实现 创建抽象数据类型线性表ADT
int select = 1;
ElemType Item;
//元素定义,在头文件也要定义类型
//基本操作 :尾插 头插 显示顺序表 尾删 头删
//按位置插入 查找数据 求数据表长度 按位置删除 按值删除数据
// 插入删除<-- --->排序 、顺序表逆值 顺序表清除 顺序表摧毁
//0代表退出系统
while(select)
{
printf("*********************************\n");
printf("* [1] push_back [2] push_front *\n");
printf("* [3] show_list [4] pop_back *\n");
printf("* [5] pop_front [6] insert_pos *\n");
printf("* [7] find [8] length *\n");
printf("* [9] delete_pos [10]delete_val *\n");
printf("* [11] sort [12] reverse *\n");
printf("* [13] clear [14] destory *\n");
printf("* [0] quit_system *\n");
printf("*********************************\n");
printf("请选择:>");
scanf("%d",&select);
if(select == 0)
break;
switch(select)
{
//基础架构 -->定义元素
// case 1:
// break;
// case 2:
// break;
// default:
// printf("输入的选择错误,请重新输入。\n");
// break;
case 1:
//可以一连串尾部插入以-1结束
printf("请输入要插入的数据(-1结束):>"); //push_back 逗号表达式-判断逗号后真假
while(scanf("%d",&Item),Item != -1)
{
push_back(&mylist,Item);
//需要对函数进行实现
}
break;
case 2:
//push_front 头部插入
printf("请输入要插入的数据tou(-1结束):>"); //push_back 逗号表达式-判断逗号后真假
while(scanf("%d",&Item),Item != -1)
{
push_front(&mylist,Item);
}
break;
case 3:
//显示顺序表,函数声明之后去源文件实现
show_list(&mylist);
break;
case 4:
//尾部删除
pop_back(&mylist);
break;
case 5:
//头部删除
pop_front(&mylist);
break;
case 11:
break;
default:
printf("输入的选择错误,请重新输入。\n");
break;
}
}
return 0 ;
}
头文件h
//头文件负责结构、函数、 数据的声明
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include<stdio.h>//引入概念
//引入相应.cpp==源文件中需要用到的函数
#include<malloc.h>
#include<assert.h>
//顺序表长度为8
#define SEQLIST_INIT_SIZE 8
//定义int类型整形 数据元素 数据表
typedef int ElemType;
//结构体 SeqList 初始化
typedef struct SeqList
{
ElemType *base;//基本成员- 顺序表空间 ==指针
int capacity;//容量 8
int size; //表的大小<=8
}SeqList;
//声明之后去相应.cpp文件进行实现
void InitSeqList(SeqList *list) ;
void push_back(SeqList *list,ElemType x) ;//尾插
void push_front(SeqList *list,ElemType x) ;//头插
void show_list(SeqList *list); //显示列表
void pop_back(SeqList *list);//尾部删除pop
void pop_front(SeqList *list);//头部删除pop
#endif //_SEQLIST_H_