链式线性表和顺序线性表

顺序线性表

顺序表的存储结构通常用一维数组来描述,数组的下标与元素在线性表中的序号相对应。

在这里插入代码片
线性表的存储结构:
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;
}

你可能感兴趣的:(数据结构)