/*初始化顺序表*/
Status InitSqlList(SqList *list);
/*插入顺序表*/
Status InsertSqlList(SqList *list,int i,ElemType e);
/*删除顺序表的元素*/
Status DeleteSqList(SqList *list ,int i);
/*更新元素*/
Status UpdateSqList(SqList *list,int i,ElemType e);
/*获取元素*/
void GetElemType(SqList *list,int i,ElemType *e);
/*判断顺序表是否为空*/
int IsEmpty(SqList *list);
/*获取顺序表长度*/
int GetLength(SqList *list);
/*清空顺序表*/
void ClearSqList(SqList *list);
/*遍历顺序表*/
void showSqList(SqList *list);
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 3
#define SUCCESS 1
#define ERROR 0
#define true 1
#define false 0
typedef int Status;
typedef char ElemType;
typedef struct
{
ElemType *base;
int length;
}SqList;
/*初始化顺序表*/
Status InitSqlList(SqList *list);
/*插入顺序表*/
Status InsertSqlList(SqList *list,int i,ElemType e);
/*删除顺序表的元素*/
Status DeleteSqList(SqList *list ,int i);
/*更新元素*/
Status UpdateSqList(SqList *list,int i,ElemType e);
/*获取元素*/
void GetElemType(SqList *list,int i,ElemType *e);
/*判断顺序表是否为空*/
int IsEmpty(SqList *list);
/*获取顺序表长度*/
int GetLength(SqList *list);
/*清空顺序表*/
void ClearSqList(SqList *list);
/*遍历顺序表*/
void showSqList(SqList *list);
int main()
{
SqList list;
InitSqlList(&list);
InsertSqlList(&list,1,'a');
InsertSqlList(&list,2,'b');
InsertSqlList(&list,2,'c');
showSqList(&list);
// DeleteSqList(&list,2);
// showSqList(&list);
ElemType e;
GetElemType(&list,2,&e);
printf("查询结果为:%c\n",e);
printf("length: %d\n",GetLength(&list));
UpdateSqList(&list,1,'e');
showSqList(&list);
return 0;
}
Status InitSqlList(SqList *list)
{
list->base = (ElemType *)malloc(sizeof(ElemType) * MAXSIZE); //申请内存空间
if(!list->base)
{
return ERROR;
}
list->length = 0;
return SUCCESS;
}
Status InsertSqlList(SqList *list,int i,ElemType e)
{
if(i<1 || i>MAXSIZE || list->length == MAXSIZE){
printf("插入位置非法或表已满\n");
return ERROR;
}
int j = list->length - (i-1); //需要循环的次数
int k = list->length; //K表示顺序表中最后一个元素下标 + 1的位置
while(j>0)
{
list->base[k] = list->base[k-1]; //从最后一个元素开始依次往后移动一个单位空间
k--;
j--;
}
list->base[i-1] = e;
list->length++;
return SUCCESS;
}
Status DeleteSqList(SqList *list ,int i)
{
if(i<1 || i>MAXSIZE || list->length == 0)
{
printf("删除位置非法\n");
return ERROR;
}
int j = list->length - (i-1); //需要循环的次数
while(j>0)
{
list->base[i-1] = list->base[i]; //依次往前移动一个单位空间
i++;
j--;
}
list->length--;
return SUCCESS;
}
Status UpdateSqList(SqList *list,int i,ElemType e)
{
if(i<1 || i>MAXSIZE || list->length == 0)
{
printf("元素不存在\n");
}
list->base[i-1] = e;
}
void GetElemType(SqList *list,int i,ElemType *e)
{
if(i<1 || i>MAXSIZE || list->length == 0)
{
printf("元素不存在\n");
}
*e = list->base[i-1];
}
int IsEmpty(SqList *list)
{
if(list->length == 0)
{
return false;
}
return true;
}
int GetLength(SqList *list)
{
return list->length;
}
void ClearSqList(SqList *list)
{
list->length == 0;
}
void showSqList(SqList *list)
{
int j = list->length;
printf("当前顺序表: ");
for(int i=0;i<j;i++){
printf(" %c ",list->base[i]);
}
putchar('\n');
}
运行结果: