#if !defined(Seqlist__CIELSI_989SE_AJIEZN_728JULC__INCLUDED_)#define Seqlist__CIELSI_989SE_AJIEZN_728JULC__INCLUDED_
typedef int T; // 数据元素的数据类型
struct SeqList{T* data; // 数据元素的开始地址int len; // 当前长度int max; // 线性表的最大长度
};SeqList* SL_Create(int max);
void SL_Free(SeqList* slist);
void SL_MakeEmpty(SeqList* slist);
int SL_Length(SeqList* slist);
bool SL_IsEmpty(SeqList* slist);
bool SL_IsFull(SeqList* slist);
T SL_GetAt(SeqList* slist, int i);
void SL_SetAt(SeqList* slist, int i, T x);
bool SL_InsAt(SeqList* slist, int i, T x);
T SL_DelAt(SeqList* slist, int i);int SL_FindValue(SeqList* slist, T x);
int SL_DelValue(SeqList* slist, T x);void SL_Print(SeqList* slist);#endif
#include <stdio.h>#include <stdlib.h>#include "Seqlist.h"#pragma warning(disable:4996)int main(){int max=100;SeqList* slist=SL_Create(max);int n;// printf("how many items:");scanf("%d", &n);int i;int item;// printf("the items:");for(i=0; i<n; i++){scanf("%d", &item);SL_InsAt(slist, i, item);}int idel;// printf("delete #:");scanf("%d", &idel);SL_DelAt(slist, idel);// printf("delete a value:"); int itemdel;scanf("%d", &itemdel);SL_DelValue(slist, itemdel);SL_Print(slist);SL_Free(slist);}
#include <stdio.h>#include <stdlib.h>#include "Seqlist.h"SeqList* SL_Create(int maxlen)
// 创建一个顺序表
// 与SqLst_Free()配对
{SeqList* slist=(SeqList*)malloc(sizeof(SeqList));slist->data =(T*)malloc(sizeof(T)*maxlen);slist->max=maxlen;slist->len=0;return slist;}void SL_Free(SeqList* slist)
// 释放/删除 顺序表
// 与SqLst_Create()配对
{free(slist->data);free(slist);}void SL_MakeEmpty(SeqList* slist)
// 置为空表
{slist->len=0;}int SL_Length(SeqList* slist)
// 获取长度
{return slist->len;}bool SL_IsEmpty(SeqList* slist)
// 判断顺序表是否空
{return0==slist->len;}bool SL_IsFull(SeqList* slist)
// 判断顺序表是否满
{return slist->len==slist->max;}T SL_GetAt(SeqList* slist, int i)
// 获取顺序表slist的第i号结点数据
// 返回第i号结点的值
{if(i<0||i>=slist->len){printf("SL_GetAt(): location error when reading elements of the slist!\n"); SL_Free(slist);exit(0);}elsereturn slist->data[i];}void SL_SetAt(SeqList* slist, int i, T x)
// 设置第i号结点的值(对第i号结点的数据进行写)
{if(i<0||i>=slist->len){printf("SL_SetAt(): location error when setting elements of the slist!\n"); SL_Free(slist);exit(0);}else slist->data[i]=x;}bool SL_InsAt(SeqList* slist, int i, T x)
// 在顺序表的位置i插入结点x, 插入d[i]之前
// i的有效范围[0,plist->len]{// 请在这里补充代码,完成本关任务if(SL_IsFull(slist)){returnfalse;}for(int j=slist->len;j>=i;j--){slist->data[j]=slist->data[j-1];}slist->data[i]=x;slist->len++;returntrue;}T SL_DelAt(SeqList* slist, int i)
// 删除顺序表plist的第i号结点
// i的有效范围应在[0,plist->len)内,否则会产生异常或错误。
// 返回被删除的数据元素的值。
{// 请在这里补充代码,完成本关任务if(SL_IsEmpty(slist)){returnfalse;}T item=slist->data[i];for(int j=i;j<slist->len;j++){slist->data[j]=slist->data[j+1];}slist->len--;return item;}int SL_FindValue(SeqList* slist, T x)
// 在顺序表表中查找第一个值为x的结点,返回结点的编号
// 返回值大于等于0时表示找到值为x的结点的编号,-1表示没有找到
{int i=0;while(i<slist->len && slist->data[i]!=x) i++;if(i<slist->len)return i;elsereturn -1;}int SL_DelValue(SeqList* slist, T x)
// 删除第一个值为x的结点,
// 存在值为x的结点则返回结点编号, 未找到返回-1
{// 请在这里补充代码,完成本关任务int index=99999;for(int i=0;i<slist->len;i++){if(slist->data[i]==x){index=i;break;}}if(index<slist->len){SL_DelAt(slist,index);}else{return -1;}}void SL_Print(SeqList* slist)
// 打印整个顺序表
{if(slist->len==0){printf("The slist is empty.\n");return;}//printf("The slist contains: ");for(int i=0; i<slist->len; i++){printf("%d ", slist->data[i]);}printf("\n");}