欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

顺序表的实现

程序员文章站 2022-05-26 12:09:48
...
  • 实现了线性表的初始化、销毁、尾增尾删、头增头删、指定位置的增加删除,以及打印最后的结果。

SeqList.h

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<assert.h>
#define SLDataType int

typedef struct SeqList
{
	SLDataType* array; // 指向动态开辟的数组
	size_t size;    // 有效数据个数
	size_t capicity;  // 容量空间的大小
}SeqList;

// 基本增删查改接口
// 顺序表初始化
void SeqListInit(SeqList* ps) {
	assert(ps);
	ps->array = NULL;
	ps->size = 0;
	ps->capicity = 0;
}
// 顺序表销毁
void SeqListDestory(SeqList* ps) {
	assert(ps);
	free(ps->array);
	ps->size = 0;
	ps->capicity = 0;
}
// 顺序表打印
void SeqListPrint(SeqList* ps) {
	assert(ps);
	for (int i = 0; i < ps->size; i++) {
		printf("%d ", ps->array[i]);
	}
	printf("\n");
}
// 检查空间,如果满了,进行增容
void CheckCapacity(SeqList* ps) {
	assert(ps);
	if (ps->size == ps->capicity) {
		size_t newcapacity = ps->capicity == 0 ? 4 : ps->capicity * 2;
		ps->array = (SLDataType*)realloc(ps->array, newcapacity * sizeof(SLDataType));
		ps->capicity = newcapacity;
	}
}
// 顺序表尾插
void SeqListPushBack(SeqList* ps, SLDataType x) {
	assert(ps);
	CheckCapacity(ps);
	size_t i = 0;
	for (; i < ps->size; i++);
	if (ps->size == i) {
		CheckCapacity(ps);
		ps->array[i] = x;
		ps->size++;
	}

}
// 顺序表尾删
void SeqListPopBack(SeqList* ps) {
	assert(ps);
	ps->size--;
}
// 顺序表头插
void SeqListPushFront(SeqList* ps, SLDataType x) {
	assert(ps);
	CheckCapacity(ps);
	for (int i = ps->size + 1; i > 0; i--) {
		ps->array[i] = ps->array[i - 1];
	}
	ps->array[0] = x;
	ps->size++;
}
// 顺序表头删
void SeqListPopFront(SeqList* ps) {
	assert(ps);
	for (int i = 0; i < ps->size; i++) {
		ps->array[i] = ps->array[i + 1];
	}
	ps->size--;
}
// 顺序表查找
int SeqListFind(SeqList* ps, SLDataType x) {
	assert(ps);
	for (int i = 0; i < ps->size; i++) {
		if (ps->array[i] == x)
			return i;
	}
	return -1;
}
// 顺序表在pos位置插入x
void SeqListInsert(SeqList* ps, size_t pos, SLDataType x) {
	assert(ps);
	CheckCapacity(ps);
	for (int i = 0; i < ps->size; i++) {
		if (i == pos) {
			for (int j = ps->size; j > pos; j--) {
				ps->array[j] = ps->array[j - 1];
			}
			ps->array[pos] = x;
		}
	}
	ps->size++;
}
// 顺序表删除pos位置的值
void SeqListErase(SeqList* ps, size_t pos) {
	assert(ps);
	for (int i = 0; i < ps->size; i++) {
		if (i == pos) {
			for (int j = pos; j < ps->size; j++) {
				ps->array[j] = ps->array[j + 1];
			}
		}
	}
	ps->size--;
}


SeqList.c(首先实现尾插尾删)

#include"SeqList.h"

int main() {
	SeqList s;
	SeqListInit(&s);
	SeqListPushBack(&s, 0);
	SeqListPushBack(&s, 1);
	SeqListPushBack(&s, 2);
	SeqListPushBack(&s, 3);     // 给顺序表尾插四个数 0 1 2 3 
	SeqListPrint(&s);
	return 0;
}


顺序表的实现

int main() {
	SeqList s;
	SeqListInit(&s);
	SeqListPushBack(&s, 0);
	SeqListPushBack(&s, 1);
	SeqListPushBack(&s, 2);
	SeqListPushBack(&s, 3);     // 给顺序表尾插四个数 0 1 2 3 
	SeqListPopBack(&s);           // 删除顺序表最后一个位置的数字
	SeqListPrint(&s);
	return 0;
}

顺序表的实现

SeqList.c(头插头删)

int main() {
	SeqList s;
	SeqListInit(&s);
	SeqListPushBack(&s, 0);
	SeqListPushBack(&s, 1);
	SeqListPushBack(&s, 2);
	SeqListPushBack(&s, 3);     // 给顺序表尾插四个数 0 1 2 3 
	SeqListPopBack(&s);           // 删除顺序表最后一个位置的数字
	SeqListPushFront(&s, -1);   // 在顺序表最前边插入 -1
	SeqListPrint(&s);
	return 0;
}

顺序表的实现

int main() {
	SeqList s;
	SeqListInit(&s);
	SeqListPushBack(&s, 0);
	SeqListPushBack(&s, 1);
	SeqListPushBack(&s, 2);
	SeqListPushBack(&s, 3);     // 给顺序表尾插四个数 0 1 2 3 
	SeqListPopBack(&s);           // 删除顺序表最后一个位置的数字
	SeqListPushFront(&s, -1);   // 在顺序表最前边插入 -1
	SeqListPopFront(&s);          // 删除顺序表最前边的 -1
	SeqListPrint(&s);
	return 0;
}

顺序表的实现

下边就不进行一一演示了,毕竟我懒还有好多**^ _ ^**,需要用哪个直接调用对应的函数即可。