栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

顺序表(数据结构)(VS)(C语言)(SeqList)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

顺序表(数据结构)(VS)(C语言)(SeqList)

顺序表
  • 前言
  • 1.SeqListMain.c
  • 2.SeqList.h
  • 3.SeqList.c
  • 效果
  • 看完给个关注,多谢了!!!


前言

  这是我由C语言写的顺序表,希望对大家有帮助。


1.SeqListMain.c
#include "SeqList.h"
// 测试1
void SLTest1()
{
    SL sl;
    SL* ps = &sl;
    SLInit(ps);
    SLPushBack(ps, 1);
    SLPushBack(ps, 1);
    SLPushBack(ps, 1);
    SLPushBack(ps, 1);
    SLPushFront(ps, 2);
    SLPushFront(ps, 3);
    SLPushFront(ps, 3);
    SLPopBack(ps);
    SLPopBack(ps);
    SLPopBack(ps);
    SLPopBack(ps);
    SLPopBack(ps);
    SLPrint(ps);
    SLDestroy(ps);
}
// 测试2
void SLTest2()
{
    SL sl;
    SL* ps = &sl;
    SLInit(ps);
    SLPushFront(ps, 1);
    SLPushFront(ps, 1);
    SLPushFront(ps, 1);
    SLPushFront(ps, 1);
    SLPushFront(ps, 2);
    SLPushFront(ps, 3);
    SLPrint(ps);
    SLPopFront(ps);
    SLPrint(ps);
    SLDestroy(ps);
}
// 测试3
void SLTest3()
{
    SL sl;
    SL* ps = &sl;
    SLInit(ps);
    SLPushFront(ps, 1);
    SLPrint(ps);
    int i = SLFind(ps,1);
    printf("%dn", i);
    printf("%dn", sl.sl[i]);
    i = SLFind(ps, 1);
    printf("%dn", i);
    SLDestroy(ps);
}
// 测试4
void SLTest4()
{
    SL sl;
    SL* ps = &sl;
    SLInit(ps);
    SLPushBack(ps, 1);
    SLPushBack(ps, 1);
    SLPushBack(ps, 1);
    SLPrint(ps);
    SLInsert(ps, 3, 3);
    SLPrint(ps);
    SLErase(ps, 2);
    SLPrint(ps);
    SLDestroy(ps);
}
// 测试5
void SLTest5()
{
    SL sl;
    SL* ps = &sl;
    SLInit(ps);
    SLDestroy(ps);
    SLPushBack(ps, 1);
    SLPrint(ps);
    SLDestroy(ps);
}
// 测试6
void SLTest6()
{
    SL sl;
    SL* ps = &sl;
    SLInit(ps);
    SLPushBack(ps, 1);
    SLPrint(ps);
    SLModify(ps, 0, 2);
    SLPrint(ps);
    SLDestroy(ps);
}
// 主函数
int main(void)
{
    printf("SLTest1:n");
    SLTest1();
    printf("SLTest2:n");
    SLTest2();
    printf("SLTest3:n");
    SLTest3();
    printf("SLTest4:n");
    SLTest4();
    printf("SLTest5:n");
    SLTest5();
    printf("SLTest6:n");
    SLTest6();
    return 0;
}

2.SeqList.h
#pragma once

#define _CRT_SECURE_NO_WARNINGS 1
//_CRT_SECURE_NO_WARNINGS

// 头文件的引用
#include 
#include 
#include 
#include 

// 顺序表中的类型
typedef int SLDateType;

// 顺序表的结构体
typedef struct SeqList
{
	SLDateType* sl;
	size_t size;
	size_t capacity;
}SL;

// 对数据的管理:
// 初始化顺序表
void SLInit(SL* ps);
// 删除所有数据
void SLDestroy(SL* ps);
// 打印所有数据
void SLPrint(const SL* ps);
// 顺序表的最后处增加
void SLPushBack(SL* ps, SLDateType x);
// 顺序表的最前处增加
void SLPushFront(SL* ps, SLDateType x);
// 顺序表的最前处删除
void SLPopFront(SL* ps);
// 顺序表的最后处删除
void SLPopBack(SL* ps);
// 顺序表查找数据
int SLFind(SL* ps, SLDateType x);
// 顺序表在pos位置插入x
void SLInsert(SL* ps, size_t pos, SLDateType x);
// 顺序表删除pos位置的值
void SLErase(SL* ps, size_t pos);
//顺序表修改pos位置的值
void SLModify(SL* ps, size_t pos, SLDateType x);

3.SeqList.c
#include "SeqList.h"

//检查顺序表容量
static int SLCheckCapactiy(SL* ps)
{
	if (ps->size == ps->capacity)
	{
		size_t tmp_capacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		SLDateType* ptmp_sl = (SLDateType*)realloc(ps->sl, sizeof(SLDateType) * tmp_capacity);
		if (ptmp_sl)
		{
			ps->sl = ptmp_sl;
			ps->capacity = tmp_capacity;
			return 0;
		}
		else
		{
			perror("SLCheck");
			return 1;
		}
	}
	return 0;
}
// 初始化顺序表
void SLInit(SL* ps)
{
	assert(ps);
	ps->sl = NULL;
	ps->capacity = ps->size = 0;
}
// 删除所有数据
void SLDestroy(SL* ps)
{
	assert(ps);
	if (ps->sl)
	{
		free(ps->sl);
		ps->sl = NULL;
		ps->capacity = ps->size = 0;
	}
}
// 打印所有数据
void SLPrint(const SL* ps)
{
	assert(ps);
	size_t i;
	for (i = 0;i < ps->size; i++)
		printf("%d ", ps->sl[i]);
	printf("n");
}
// 顺序表的最后处增加
void SLPushBack(SL* ps, SLDateType x)
{
	assert(ps);
	if (SLCheckCapactiy(ps)) { return; }
	ps->sl[ps->size] = x;
	ps->size++;
}
// 顺序表的最前处增加
void SLPushFront(SL* ps, SLDateType x)
{
	assert(ps);
	if (SLCheckCapactiy(ps)) { return; }
	size_t i = ++ps->size;
	while (i)
	{
		ps->sl[i] = ps->sl[i - 1];
		i--;
	}
	ps->sl[0] = x;
}
// 顺序表的最前处删除
void SLPopFront(SL* ps)
{
	assert(ps);
	
	SLErase(ps, 0);
}
// 顺序表的最后处删除
void SLPopBack(SL* ps)
{
	assert(ps);
	
	SLErase(ps, ps->size - 1);
}
// 顺序表查找数据
int SLFind(SL* ps, SLDateType x)
{
	size_t i;
	for (i = 0;i < ps->size; i++)
		if (ps->sl[i] == x)
			return i;
	return -1;
}
// 顺序表在pos位置插入x
void SLInsert(SL* ps, size_t pos, SLDateType x)
{
	assert(ps);
	assert(pos <= ps->size);
	if (SLCheckCapactiy(ps)) { return; }
	size_t end = ps->size++;
	while (pos < end)
	{
		ps->sl[end] = ps->sl[end - 1];
		end--;
	}
	ps->sl[pos] = x;
}
// 顺序表删除pos位置的值
void SLErase(SL* ps, size_t pos)
{
	assert(ps);
	assert(pos <= ps->size);
	size_t end = --ps->size;
	while (pos < end)
	{
		ps->sl[pos] = ps->sl[pos + 1];
		pos++;
	}
}
//顺序表修改pos位置的值
void SLModify(SL* ps, size_t pos, SLDateType x)
{
	assert(ps);
	assert(pos <= ps->size);
	ps->sl[pos] = x;
}

效果


看完给个关注,多谢了!!!

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1038174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号