通讯录项目的实现以及动态顺序表(基于顺序表)

发布时间:2024年01月20日
首先我们要知道什么是顺序表:
顺序表的底层结构是数组,对数组的封装,实现了常?的增删改查等接?,顺序表分为静态顺序表(使?定?数组存储元素)和动态顺序表(按需申请)
静态顺序表缺点: 空间给少了不够?,给多了造成空间浪费

拿出来我之前以及写好了的顺序表的代码:

具体代码如下:

SeqLisr.h

#pragma once

#include<stdio.h>

#include<assert.h>

#include<stdlib.h>

typedef int SLDataType;

typedef struct SeqList

{

  SLDataType* arr;//

  int size;   // 有效数据个数

  int capacity; // 空间容量

}SL;

void SLInit(SL* ps);//初始化

void SLDestroy(SL* ps);//销毁

void SLPrint(SL* ps);//测试

void SLCheckCapacity(SL* ps);//扩容

void SLPushBack(SL* ps, SLDataType x);// 尾部插入

void SLPopBack(SL* ps); //尾部删除

void SLPushFront(SL* ps, SLDataType x);//头部插入

void SLPopFront(SL* ps);//头部删除

void SLInsert(SL* ps, int pos, SLDataType x); // 指定位置之前插入数据

void SLErase(SL* ps, int pos);//指定位置之前删除数据

int SLFind(SL* ps, SLDataType x);//指定位置查找数据

SeqLisr.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"SeqLisr.h"

//初始化

void SLInit(SL *ps) {

ps->arr = NULL;

ps->capacity = ps->size = 0;

}

//销毁

void SLDestroy(SL* ps) {

assert(ps);

if (ps->arr) {

free(ps->arr);

}

ps->arr = NULL;

ps->capacity = ps->size = 0;

}

//扩容

void SLCheckCapacity(SL* ps) {

if (ps->size == ps->capacity) {

int newcapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;

SLDataType* tmp = (SLDataType*)realloc(ps->arr, newcapacity * sizeof(SLDataType));

if (tmp == NULL) {

perror("tmp");

exit(1);

}

ps->arr = tmp;

ps->capacity = newcapacity;//把他变成扩容之后的新内存

}

}

// 尾部插入

void SLPushBack(SL* ps, SLDataType x){

assert(ps);

//空间不够,扩容

SLCheckCapacity(ps);

//空间足够,直接插入

ps->arr[ps->size] = x;

ps->size++;

}

//测试打印

void SLPrint(SL* ps) {

for (int i = 0; i < ps->size; i++) {

printf("%d ", ps->arr[i]);

}

printf("\n");

}

//头部插入

void SLPushFront(SL* ps, SLDataType x) {

assert(ps);

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