顺序线性表
顺序表的存储结构通常用一维数组来描述,数组的下标与元素在线性表中的序号相对应。
在这里插入代码片
线性表的存储结构:
typedef struct {
int elem[MAX_SIZE];//线性表的数据元素数组
int length; //线性表的当前长度
} seqlist;
typedef struct {
int *elem;
int length;
int listsize;
}seqlist;
顺序表基本操作
初始化顺序表
在这里插入代码片
int seqlist_init(seqlist *list, int size)
{
list->elem = (int *)malloc(size * sizeof(int));
if (!list->elem)
return -1;
list->length = 0;
list->listsize = size;
return 0;
}
插入数据元素
在这里插入代码片
int seqlist_insert(seqlist *list , int index, int data)
{
int i = 0;
if (index < 0 || index > list->listsize -1)
return -1;
if (list->length >= list->listsize)
return -1;
for(i = list->length - 1; i >= index; i--)
list->elem[i+1] = list->elem[i];
list->elem[index] = data;
list->length++;
return 0;
}
删除数据元素
在这里插入代码片
int seqlist_del(seqlist *list , int index)
{
int i = 0;
if (index < 0 || index > list->length)
return -1;
for(i = index; i < list->length; i++)
list->elem[i] = list[i + 1];
list->length--;
return 0;
}
查找数据元素
在这里插入代码片
int seqlist_find(seqlist *list, int data)
{
for(int i = 0; i < list->length; i++) {
if (list->elem[i] == data)
return 1;
}
return 0;
}
链式线性表
链式线性表不保证地址的连续性,通过域指针将一个个内存区域连接起来。
存储结构
在这里插入代码片
typedef struct node {
int data;
struct node *next;
}node;
typedef struct node* seqlist;
单链表的基本操作
建立单链表
在这里插入代码片
seqlist list_create(seqlist list)
{
list = (seqlist)malloc(sizeof(node));
if (!list) {
return NULL;
}
seqlist pre = list;
for (int i = 0; i < 10; i++) {
seqlist cur = (seqlist)malloc(sizeof(node));
cur->data = i;
cur->next = NULL;
pre->next = cur;
pre = cur;
}
return list;
}
插入数据元素
在这里插入代码片
seqlist list_insert(seqlist list, int index, int data)
{
node *new_node = NULL;
node *head = list;
int i = 0;
while (head && i < index - 1) {
head = head->next;
i++;
}
if (i != index - 1) {
return NULL;
}
new_node = (node *)malloc(sizeof(node));
new_node->data = data;
new_node->next = head->next;
head->next = new_node;
return list;
}
删除数据元素
在这里插入代码片
seqlist list_delete(seqlist list, int index)
{
node *head = list;
int i = 0;
while ((i < index -1) && head) {
head = head->next;
i++;
}
if (i != index - 1) {
return NULL;
}
node *p = head->next;
head->next = head->next->next;
free(p);
return list;
}
查找数据元素
在这里插入代码片
seqlist list_find(seqlist list, int data)
{
node *p_node = list->next;
while (p_node && p_node->data != data) {
p_node = p_node->next;
}
return p_node;
}