当前位置: 首页 > article >正文

数据结构顺序表超详细 (通讯录相关联) 含源码 C语言

test.c

#define _CRT_SECURE_NO_WARNINGS  1
#pragma warning(disable:6031)
#include "SeqList.h"
void test()
{
	SeqList s1;
	SeqListInit(&s1);//这里 是函数的调用不用写返回值的
	SeqListPushBack(&s1, 1);
	SeqListPushBack(&s1, 3);
	SeqListPushBack(&s1, 0);
	SeqListPushBack(&s1, 4);
	
	SeqListPushBack(&s1, 0);
	SeqListPushBack(&s1, 2);
	SeqListPushBack(&s1, 1);
	SeqListPushBack(&s1, 8);
	SeqListPushBack(&s1, 3);
	 SeqListPrint(&s1);
	 printf("\n");
	 //
	 /*SeqListPushFront(&s1, 9);
	 SeqListPrint(&s1);
	 printf("\n");*/
	 //
	 SeqListErase(&s1, 3);
	 SeqListPrint(&s1);
	 printf("\n");
	 SeqListInsert(&s1, 3,5);
	 SeqListPrint(&s1);
	 //删除
	 ///*SeqListPopBack(&s1);
	 /*SeqListPopBack(&s1);
	 SeqListPopBack(&s1);
	 SeqListPopBack(&s1);
	 SeqListPopBack(&s1);
	 SeqListPopBack(&s1);
	 SeqListPopBack(&s1);
	 SeqListPopBack(&s1);
	 SeqListPopBack(&s1);*/
	 //SeqListPrint(&s1);
	 /*printf("\n");*/
	 
}
int main()
{
	test();
	return 0;
}
头文件
SeqList.h


#pragma once
#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>

typedef int SLDateType; //方便不同类型的修改
typedef struct SeqList
{
	SLDateType* a; //指向动态开辟的数组
	int size; //个数
	int capacity; //容量
}SeqList;//简化命名

// 对数据的管理:增删查改 
//初始化
void SeqListInit(SeqList* ps);
//销毁
void SeqListDestroy(SeqList* ps);
//查容量
void SeqListCheck(SeqList* ps);
//插入数据
void SeqListInsert(SeqList* ps, int pos,SLDateType x);
//删除数据
void SeqListErase(SeqList* ps, int pos);
//打印
void SeqListPrint(SeqList* ps);
//尾cha
void SeqListPushBack(SeqList* ps, SLDateType x);
//头插
void SeqListPushFront(SeqList* ps, SLDateType x);
//头删
void SeqListPopFront(SeqList* ps);
//尾shan
void SeqListPopBack(SeqList* ps);

// 顺序表查找
int SeqListFind(SeqList* ps, SLDateType x);
// 顺序表在pos位置插入x
void SeqListInsert(SeqList* ps, int pos, SLDateType x);
// 顺序表删除pos位置的值
//void SeqListErase(SeqList* ps, int pos);
函数实现  



#define _CRT_SECURE_NO_WARNINGS  1
#pragma warning(disable:6031)
#include "SeqList.h"

//初始化
void SeqListInit(SeqList* ps)
{
	ps->a = (SLDateType*)malloc(sizeof(SLDateType)*4);
	if (ps->a == NULL)
	{
		perror("malloc fail");
		return;
	}
	ps->size = 0;
	ps->capacity = 4;
}

//销毁
void SeqListDestroy(SeqList* ps)
{
	free(ps->a);
	ps->a = NULL;
	ps->capacity = ps->size = 0;
}

//查容量
void SeqListCheck(SeqList* ps)
{
	if (ps->size == ps->capacity)
	{
	SLDateType* tmp = (SLDateType*)realloc(ps->a, sizeof(SLDateType) * ps->capacity * 2);
			if (tmp == NULL)
			{
				perror("realloc failed");
				return;
			}
			ps->a = tmp;
			ps->capacity *= 2;
	}
}
//插入数据
void SeqListInsert(SeqList* ps, int pos,SLDateType x)
{
	assert(ps);
	void SeqListCheck(ps);
	if (pos < ps->size)
		//这里传入的是地址 不是数字
	{
		memmove(&ps->a[pos + 1], &ps->a[pos], sizeof(SLDateType) * (ps->size - pos));
		ps->a[pos] = x;
	}
	else { ps->a[pos] = x; }
		ps->size++;
	
}

//删除数据
void SeqListErase(SeqList* ps, int pos)
{
	assert(ps->size>0);
	if (pos < ps->size - 1)
	{
		memmove(&ps->a[pos], &ps->a[pos + 1], sizeof(SLDateType) * (ps->size - pos));
		//ps->a[pos] = 0;
		ps->size--;
	}
    if(pos==ps->size-1)
	{
		ps->a[pos] = 0;
		ps->size--;
	}

}
//尾插
void SeqListPushBack(SeqList* ps, SLDateType x)
{
	/*void SeqListCheck(SeqList * ps);
	ps->a[ps->size] = x;
	ps->size++;*/
	SeqListInsert(ps, ps->size,  x);
}

//尾删
void SeqListPopBack(SeqList* ps)
{
	//检查是否有数据,没有会暴力报错
	/*assert(ps->size > 0);
	ps->a[ps->size - 1] = 0;
	ps->size--;*/
	assert(ps);
	SeqListErase(ps,ps->size-1);
}
//头插
void SeqListPushFront(SeqList* ps, SLDateType x) 
{
	SeqListInsert(ps, 0, x);
}
//头删
void SeqListPopFront(SeqList* ps)
{
	assert(ps);
	SeqListErase(ps, 0);
}

// 顺序表查找
int SeqListFind(SeqList* ps, SLDateType x)
{
	assert(ps);
	int i=0;
	for (i = 0; i < ps->size; i++){
		if (ps->a[i] == x)
			return i;
	}return -1;
}
//打印
void SeqListPrint(SeqList* ps)
{
	assert(ps);
	int i = 0;
	for (i = 0; i < ps->size; i++)
	{
		printf("%d ", ps->a[i]);
	}
}

test.c中代码可以按照需求更改


http://www.kler.cn/news/355649.html

相关文章:

  • uniapp移动端优惠券! 附源码!!!!
  • 数据库血缘工具学习,使用以及分享
  • 状态设计模式
  • JavaScript 第20章:Web Workers
  • 设计一个高效的日志分析系统:自动检测错误日志的实用指南
  • 计算机网络架构实例
  • Rocketmq 发送消息超时踩坑,消费正常
  • AJAX——HTTP 协议请求报文和响应报文结构
  • 字节跳动青训营——入营考核解答(持续更新中~~~)
  • 《 C++ 修炼全景指南:十六 》玩转 C++ 特殊类:C++ 六种必备特殊类设计的全面解析
  • C#第四讲:C#语言基本元素概览,初识类型、变量与方法,算法简介
  • nginx配置多个SSL证书实操记录
  • Qt 支持打包成安卓
  • RestClient查询文档match查询、精确查询和布尔查询
  • SSD |(七)FTL详解(中)
  • 轻松实现 API 接口限流:Bucket4j 在 Spring Boot 中的应用
  • 自适应权重
  • MongoDB集合(Collection)的详细使用说明
  • OpenAI重磅发布GPT-4O-Audio-Preview 语音也能“读懂”情绪!
  • 重塑企业数字化未来:物联网与微服务架构的战略性深度融合