//Sequential list-->Slist顺序表
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int* elements;
int size;
int capacity;
}Slist;
void SlistInit(Slist* lst, int capacity);
void SlistDestroy(Slist* lst);
void SlistInsert(Slist* lst, int elem, int index);
void SlistDelete(Slist* lst, int index);
int SlistIndex(Slist* lst, int elem);
void SlistChange(Slist* lst, int index, int elem);
void SlistInit(Slist *lst,int capacity)
{
if (capacity <= 0)
{
printf("capacity error");
return;
}
lst->elements = (int*)malloc(sizeof(int) * capacity);
if (lst->elements == NULL)
exit(EXIT_FAILURE);
lst->capacity = capacity;
lst->size = 0;
}
void SlistDestroy(Slist* lst)
{
if (lst->elements)
free(lst->elements);
}
void SlistInsert(Slist* lst, int elem, int index)
{
int i;
int* newelements;
if (index<0 || index>lst->size)
{
printf("index error");
return;
}
//扩容的过程
if (index == lst->capacity)
{
newelements = (int*)malloc(sizeof(int) * lst->capacity * 2);
if (newelements == NULL)
exit(EXIT_FAILURE);
for (i = 0; i < lst->size; i++)
{
newelements[i] = lst->elements[i];
}
free(lst->elements);
newelements[i] = elem;
lst->size++;
lst->capacity *= 2;
lst->elements = newelements;
}
else
{
for (i = lst->size - 1; i >= index; i--)
lst->elements[i + 1] = lst->elements[i];
lst->elements[index] = elem;
lst->size++;
}
}
void SlistDelete(Slist* lst, int index)
{
int i;
if (index < 0 || index >= lst->size)
{
printf("index error");
return;
}
for(i=index+1;i<=lst->size-1;i++)
lst->elements[i -1] = lst->elements[i];
lst->size--;
}
int SlistIndex(Slist* lst, int elem)
{
int i;
for (i = 0; i < lst->size; i++)
if (lst->elements[i] == elem)
return i;
return -1;
}
void SlistChange(Slist* lst, int index, int elem)
{
if (index < 0 || index >= lst->size)
{
printf("index error");
return;
}
lst->elements[index] = elem;
}
基础数据结构——顺序表代码实现C
于 2024-08-03 22:19:36 首次发布