顺序表和链表基础

发布时间:2024年01月15日

定义动态的顺序表

typedef int SLDataType;
typedef struct Seqlist {
	SLDataType* array;
	size_t size;
	size_t capacity;
}Seqlist;

在顺序表中插入数据

bool ListInsert(Seqlist* l, int i, SLDataType e) {
	if (i < 1 || i > l->capacity)
		return false;
	int j;
	for (j = l->capacity; j >= i; j--) {
		l->array[j] = l->array[j - 1];
	}
	l->array[i - 1] = e;
	l->size++;
	return true;
}

在顺序表中删除数据?

bool ListInsert(Seqlist* l, int i, SLDataType*e) {
	if (i<1 || i>l->capacity) {
		return false;
	}
	e = l->array[i - 1];
	int j;
	for (j = i; j < l->size; j++) {
		l->array[j - 1] = l->array[j];
	}
	l->size--;
	return true;
}

按值查找操作

int LocateElem(Seqlist l, SLDataType e) {
	int i = 0;
	for (i = 0; i < l.size; i++) {
		if (l.array[i] == e)
			return i + 1;
	}
	return 0;
}

按位查找操作

int GetElem(Seqlist l, int i) {
	if (i<1 || i>l.capacity)
		return 0;
	return l.array[i - 1];
}

合并两个顺序表

#define MaxSize 20
bool Merge(Seqlist A, Seqlist B, Seqlist* C) {
	if (A.size + B.size > C->capacity)
		return false;
	int i = 0, j = 0, k = 0;
	while (i < A.size && j < B.size) {
		if (A.array[i] < B.array[j]) {
			C->array[k++] = A.array[i++];
		}
		else {
			C->array[k++] = B.array[j++];
		}
	}
	while (i < A.size) {
		C->array[k++] = A.array[i++];
	}
	while (j < B.size) {
		C->array[k++] = B.array[j++];
	}
	C->size = k;
	return true;
}

在链表中按序号查找结点值

typedef struct LNode {
	SLDataType data;
	struct LNode* next;
}LNode,*LinkList;
LNode* GetElem(LinkList L, int i) {
	int j = 1;
	LNode* p = L->next;
	if (i < 0)
		return NULL;
	if (i == 0)
		return L;
	while (p && j < i) {
		p = p->next;
		j++;
	}
	return p;
}

文章来源:https://blog.csdn.net/2301_77479435/article/details/135598487
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。