顺序表

  1. 静态数组实现
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TURE 1
#define FALSE 0
#define MAX 10

typedef struct {
	int data[MAX];
	int len;
}SqList;
void InitList(SqList*);
int ListInsert(SqList*, int pos, int e);
int ListDelete(SqList*, int pos, int* e);
void Print(SqList*);
int GetElem(SqList* sq,int pos);
int LocatElem(SqList* sq, int e);
int main() {
	SqList l;
	int e;
	InitList(&l);
	ListInsert(&l,1,1);
	ListInsert(&l,1,1);
	ListInsert(&l,1,1);
	ListInsert(&l,1,1);
	ListDelete(&l,1,&e);
	Print(&l);
	return 0;
}
void InitList(SqList* l) {
	l->len = 0;
}
int ListInsert(SqList* L, int pos, int e) {
	if (pos<1 || pos>L->len + 1) {
		return FALSE;
	}
	for (int i = L->len; i >= pos; i--)
	{
		L->data[i] = L->data[i - 1];
	}
	L->data[pos - 1] = e;
	L->len++;
	return TURE;
}
int ListDelete(SqList* L, int pos, int* e) {
	if (pos<1||L->len<pos) {
		return FALSE;
	}
	*e = L->data[pos - 1];
	for (int i = pos; i < L->len; i++)
	{
		L->data[i-1] = L->data[i];
	}
	L->len--;
	return TURE;
}
void Print(SqList* L) {
	if (L->len!=0) {
		for (int i = 0; i < L->len; i++)
		{
			printf("%d ",L->data[i]);
		}
		printf("\n");
	}
}
int GetElem(SqList* sq, int pos) {
	return sq->data[pos-1];
}
int LocatElem(SqList* sq, int e) {
	for (int i = 0; i < sq->len; i++)
	{
		if (e == sq->data[i]) return i+1;
	}
}
  1. 动态数组实现
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TURE 1
#define FALSE 0
#define InitMAX 10

typedef struct {
	int * data;
	int MaxSize;
	int len;
}SqList;
void InitList(SqList*);
int ListInsert(SqList*, int pos, int e);
int ListDelete(SqList*, int pos, int* e);
void Print(SqList*);
int GetElem(SqList* sq, int pos);
int LocatElem(SqList* sq, int e);
void IncreaseSize(SqList* sqm,int len);
int main() {
	SqList L;
	int e;
	InitList(&L);
	ListInsert(&L,1,1);
	ListInsert(&L,1,2);
	ListInsert(&L,1,2);
	ListInsert(&L,1,3);
	ListDelete(&L, 1, &e);
	ListDelete(&L, 1, &e);
	ListDelete(&L, 1, &e);
	ListDelete(&L, 1, &e);
	Print(&L);
	return 0;
}
void InitList(SqList* L) {
	L->data = (int*)malloc(sizeof(int)*InitMAX);
	L->len = 0;
	L->MaxSize = InitMAX;
	return ;
}

int ListInsert(SqList* sq, int pos, int e) {
	if (pos<1||pos>sq->len+1) {
		return FALSE;
	}
	for (int i = sq->len; i >= pos; i--)
	{
		sq->data[i] = sq->data[i - 1];
	}
	sq->data[pos - 1] = e;
	sq->len++;
	return TURE;
}
void IncreaseSize(SqList* sq, int len) {
	int* p = sq->data;
	sq->data = (int *)malloc(sizeof(int) *(sq->MaxSize+len));
	for (int i = 0; i <sq->len ; i++)
	{
		sq->data[i]=p[i];
	}
	sq->len = sq->MaxSize + len;
	free(p);
}
int ListDelete(SqList* sq, int pos, int* e) {
	if (pos<1||pos>sq->len) {
		return FALSE;
	}
	*e = sq->data[pos - 1];
	for (int i = pos; i < sq->len; i++)
	{
		sq->data[i-1] = sq->data[i];
	}
	sq->len--;
	return TURE;
}
void Print(SqList* sq) {
	if (sq->len!=0) {
		for (int i = 0; i < sq->len; i++)
		{
			printf("%d ",sq->data[i]);
		}
		printf("\n");

	}
	return;
}
int GetElem(SqList* sq, int pos) {
	return sq->data[pos - 1];
}
int LocatElem(SqList* sq, int e) {
	if (sq->len!=0) {
		for (int i = 0; i < sq->len; i++)
		{
			if (e==sq->data[i]) {
				return i + 1;
			}
		}
	}
	return FALSE;
}
  • 插入、删除操作的时间复杂度分析
    1.最好时间复杂度=O(1)
    2.最坏时间复杂度=O(n)
    3.平均时间复杂度=O(n)
  • 按位查找操作的时间复杂度:O(1)
  • 按值查找操作的时间复杂度
    1.最好时间复杂度=O(1)
    2.最坏时间复杂度=O(n)
    3.平均时间复杂度=O(n)
    优点:可以随机存储,存储密度高
    缺点:要求大片连续空间,改变容量不便
    总结:顺序表具有随机存储的特性,但是插入和删除需要移动大量元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值