#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100//线性表存储空间的初始化分配量
#define LISTINCREMENT 10//线性表存储空间的分配增量(当存储空间不够时要用到)
typedef int ElemType;
struct List
{
ElemType *elem;//存储空间的基地址
int length;//当前线性表的长度
int listsize;//当前分配的存储容量
};
int InitList(struct List *L)
{
L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));//开辟一个存储空间,并把这块存储空间的基地址赋值给elem
if(!L->elem)
{
return -1;//空间分配失败
}
L->length = 10;//当前长度
L->listsize = LIST_INIT_SIZE;//当前分配量
return 0;
}
/*
* 插入操作
*/
int ListInsert(struct List *L,int i,ElemType e)
{
//判断i是否在范围内
if (i<1 || i>L->length + 1)return -1;
//判断存储空间是否够用
if(L->length >= L->listsize){
return -1;
}
//插入操作
if (i<=L->length) {
for (int k=L->length-1; k>=i-1; k--) {
L->elem[k+1] = L->elem[k];
}
}
L->elem[i-1] = e;
L->length ++;
return 0;
}
/**
* 初始化数据
*/
void ListInit(struct List *L)
{
printf("please input data\n");
int x=1;
for (int i = 0; i<L->length; i++) {
L->elem[i] = x;
x*=2;
}
}
int ListDelete(struct List *L,int i,ElemType *e)
{
//判断删除位置合法
if (i<1||i>L->length) {
return -1;
}
if (L->length ==0) {
return -1;
}
//取出删除元素
*e = L->elem[i-1];
for (int j = i;j<L->length;j++) {
L->elem[j-1] = L->elem[j];
}
L->length--;
return 0;
}
/**
*查找操作
*/
int Locate(struct List *L,ElemType e)
{
int i = 0;
while (i<L->length&&L->elem[i]!=e) {
i++;
}
if (i<=L->length) {
return i+1;
}else
{
return -1;
}
return 0;
}
int main()
{
struct List L;
/**
* 初始化线性表
*/
InitList(&L);
/**
* 初始化数据
*/
ListInit(&L);
//查找
printf("8元素在表中的%d位置\n", Locate(&L, 8));
//插入操作
ListInsert(&L, 1, 3);
for (int i =0; i<L.length; i++) {
printf("\n%d,",L.elem[i]);
}
//删除元素
ElemType e;
ListDelete(&L, 1, &e);
for (int i =0; i<L.length; i++) {
printf("\n%d,",L.elem[i]);
}
}
线性表的顺序存储结构(查找、插入、删除等)
最新推荐文章于 2021-11-30 18:59:59 发布