函数在头文件中定义

发布时间:2025-06-24 19:38:10  作者:北方职教升学中心  阅读量:085


SeqList.c。

SeqList.h。

#pragma once#include<stdio.h>#include<stdlib.h>#include<assert.h>//定义动态顺序表结构 int SLDataType;typedef struct SeqList{	SLDataType* arr;	int capacity;	int size;}SL;///初始化void SLInit(SL* s);//销毁void SLDestroy(SL* s);//插入void数据 SLPushBack(SL* s, SLDataType x);void SLPushFront(SL* s, SLDataType x);///打印顺序表void SLPrint(SL* s);////判断void空间是否足够 SLCheckCapacity(SL* s);///删除void SLPopBack(SL* s);void SLPopFront(SL* s);///插入/删除指定位置的数据voidid SLInsert(SL* s, SLDataType x, int pos);void SLErase(SL* s, int pos);//搜索int SLFind(SL* s, int pos);

SeqList.c。请留言!

2.。

2.3。

2.3 实现动态顺序表。我们需要写一个函数来判断空间是否充足。

顺序表和数组的区别?
顺序表的底层结构是数组,对数组的封装,实现了常⽤增删改查等接⼝。

#xff1a;空间不够⽤,给太多造成空间浪费。=NULL SLCheckCapacity(s); ///有足够的空间 s->arr[s->size++] = x;}//头插void SLPushFront(SL* s, SLDataType x){ assert(s); SLCheckCapacity(s); for (int i = s->size; i > 0; i--) { s->arr[i] = s->arr[i - 1]; } s->arr[0] = x; s->size++;}///打印顺序表void SLPrint(SL* s){ for (int i = 0; i < s->size; i++) { printf("%d ", s->arr[i]); } printf("\n");}///删除void SLPopBack(SL* s){ assert(s); assert(s->size); //s->arr[s->size - 1] = -1; s->size--;}void SLPopFront(SL* s){ assert(s); assert(s->size); for (int i = 0; i<s->size-1 ; i++) { s->arr[i] = s->arr[i + 1]; } s->size--;}///插入/删除指定位置的数据voidid SLInsert(SL* s, SLDataType x, int pos){ assert(s); assert(pos>=0 && pos<=s->size); SLCheckCapacity(s); for (int i = s->size; i >pos ; i--) { s->arr[i] = s->arr[i - 1]; } s->arr[pos] = x; s->size++;}void SLErase(SL* s, int pos){ assert(s); assert(pos >= 0 && pos < s->size); for (int i = pos; i < s->size; i++) { s->arr[i] = s->arr[i + 1]; } s->size--;}///找int SLFind(SL* s, int pos){ assert(s); for (size_t i = 0; i < s->size; i++) { if (s->arr[i] == pos) return 1; } return -1;}。

目录。

下一步是在指定位置插入数据/删除数据。

在测试文件中调用此方法,并调试。

2.1。

2.2。

函数在头文件中定义。

函数方法写在源文件中。

SeqList.h。

2.2.2。

1.。

#define _CRT_SECURE_NO_WARNINGS 1#include"SeqList.h"///初始化void SLInit(SL* s) {	s->arr = NULL;	s->capacity = s->size = 0;}///销毁void SLDestroy(SL* s) {	if (s->arr)//相当于s->arr  != NULL	{		free(s->arr);	}	s->arr = NULL;	s->capacity =s->size =  0;}////判断void空间是否足够 SLCheckCapacity(SL* s){	///判断空间是否足够	if (s->capacity == s->size)	{		int newCapacity = s->capacity == 0 ? 4 : 2 * s->capacity;		SLDataType* tmp = (SLDataType*)realloc(s->arr, newCapacity * sizeof(SLDataType));		if (tmp == NULL)		{			perror("realloc");			exit(1);		}		s->arr = tmp;		s->capacity = newCapacity;	}}///插入数据//尾插void SLPushBack(SL* s, SLDataType x) {	assert(s);//等价于s!我们的药物判断顺序表中的空间是否足够  因此,

2.2.1 静态顺序表。

SeqList.h。

下面是插入数据的方法 。

2. 顺序表。 线性表。 线性表是⼀种在实际中⼴泛使 ⽤#xfff0的数据结构&c;常⻅线性表:顺序表、 静态顺序表。

概念:顺序表是⽤⼀物理地址连续存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组存储。

2.2.1。但在物理结构上并非如此⼀一定是连续的, 物理存储线性表时,通常以数组和链结构的形式存储。

#define _CRT_SECURE_NO_WARNINGS 1#include"SeqList.h"void test01(){	SL s;	SLInit(&s);	//SLPushBack(&s, 1);	//SLPushBack(&s, 2);	//SLPushBack(&s, 3);	//SLPushBack(&s, 4);	//SLPushFront(&s, 1);	//SLPushFront(&s, 2);	//SLPushFront(&s, 3);	//SLPushFront(&s, 4);	//SLInsert(&s, 5, 2);	//SLInsert(&s, 5, 0);	//SLInsert(&s, 5, 6);	//SLPopBack(&s);	/*SLPopFront(&s);	SLPrint(&s);	SLPopFront(&s);	SLPrint(&s);	SLPopFront(&s);	SLPrint(&s);	SLPopFront(&s);	SLPrint(&s);	SLPrint(&s);*/	SLDestroy(&s);};int main(){	test01();	return 0;}。

2.1 概念与结构。

1. 线性表。)是n个具有相同特性的数据元素的有限序列。


正文。

SeqList.c。 动态顺序表。

在插入数据之前,

操作前必须找到指定的位置。

2.2 分类。

线性表(linear list。字符串..。

test.c。 概念与结构。

将头文件介绍到相应的源文件中。是连续的⼀条直线。

先创建三个文件。

附源码。队列、

SeqList.h。 线性表在逻辑上是线性结构,也就是说,

实现代码初始化和销毁的第一步。 实现动态顺序表。

下一步是删除数据。


以上是顺序表的实现代码 如有任何问题,链表、 分类。 顺序表。

如图:

在头文件(SeqList.h)引入相应的头文件。栈、

SeqList.h。

SeqList.c。

2.2.2 动态顺序表。