顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!

这篇具有很好参考价值的文章主要介绍了顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

爱,是一件非专业的事情,不是本事,不是能力,是花木那样的生长,有一份对光阴和季节的钟情和执着。一定要,爱着点什么,它让我们变得坚韧,宽容,充盈。业余的,爱着。

                                                                                                         ——《生活是很好玩的》

 大家好,今天我们来实现一个在数据结构中较为容易理解的一种数据结构——顺序表。

一 . 线性表

在我们完成顺序表之前,我们先来了解一下什么是线性表。

线性表(linear list)n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组链式结构的形式存储。

例图:

 顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!

二 . 顺序表

(1)概念及结构:

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。

顺序表一般可以分为:

1. 静态顺序表:使用定长数组存储。

优点:操作简单,代码实现容易   。

缺点:内存给多少的合适呢?这个很难确定。给小了不够用,给大了就浪费内存了。

2. 动态顺序表:使用动态开辟的数组存储。

优点:数组可以根据自己的需求进行调解

缺点:中间/头部的插入删除,时间复杂度为O(N) 并且 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。

顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!

顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!

顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!

顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!

 (2)目录实现:

void menu()
{
	printf("***********************************************************\n");
	printf("1 尾插数据------2 尾删数据\n");
	printf("\n");
	printf("3 头插数据------4 头删数据\n");
	printf("\n");
	printf("5 在任意位置插入数据\n");
	printf("\n");
	printf("6 在任意位置删除数据\n");
	printf("\n");
	printf("7 查找某个数据的位置,并删除它\n");
	printf("\n");
	printf("8 打印数据\n");
	printf("\n");
	printf("-1 退出\n");
	printf("\n");
	printf("***********************************************************\n");

}

int main()
{
	int option = 0;
	SL s;
	SeqListInit(&s);
	do
	{
		menu();
		printf("请输入你的操作:>>>>>>  ");
		scanf("%d", &option);
		int sum = 0;
		int x = 0;
		int y = 0;
		int z = 0;
		int pos = 0;
		int w = 0;
		switch (option)
		{
		case 1:
			printf("请依输入尾插的数据:(-1结束)\n");
			scanf("%d", &sum);
			while (sum != -1)
			{
				SeqListPushBack(&s, sum);    // 1.尾插
				scanf("%d", &sum);
			}
			break;
		case 2:
			SeqListPopBack(&s);             // 2.尾删
			break;
		case 3:
			scanf("%d", &x);
			SeqListPushFront(&s, x);       // 3.头插
			break;
		case 4:
			SeqListPopFront(&s);           // 4.头删
			break;
		case 5:
			SeqListInsert(&s, 3, 20);     // 5.在任意位置插入数据
			break;
		case 6:
			SeqListErase(&s, 3);          // 6.在任意位置删除数据
			break;
		case 7:
			printf("请输入要删除序列的中的某个数字\n");
			scanf("%d", &z);
			y = SeqListFind(&s, z);                      // 7.查找某个数字的位置,并且删除它
			printf("%d的位置在%d处: \n", z, y);
			if (y != -1)
			{
				SeqListErase(&s, y);
			}
			break;
		case 8:
			SeqListPrint(&s);
			break;
		default:
			if (option == -1)
			{
				exit(0);  // 退出程序 
			}
			else
			{
				printf("输入错误,请重新输入\n");
			}
			break;

		}
	} while (option != -1);   // 退出程序
	SeqListDestory(&s);
	return 0;
}

 (3)接口实现:

由于静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小,所以下面我们实现动态顺序表

在这里我们先建立三个文件:

SeqList.h  文件,用于函数声明

SeqList.c  文件,用于函数的定义

Test.c  文件,用于测试函数

这样可以便利我们检查代码,理清思路。


2.1 定义结构体 SL 【SeqList.h】 

动态顺序表的结构体是由三个成员变量组成的:

a :用来指向动态开辟空间的指针

size :用来记录当前有效数据个数——表示当前数组中存储了多少个数据

capacity :用来记录当前容量——数组当前实际能存数据的空间容量是多大 

顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!

#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef int SLDataType;

// 动态顺序表
typedef struct SeqList
{
	SLDataType* a;
	int size;      // 表示数组中存储了多少个数据
	int capacity;  // 数组实际能存数据的空间容量是多大 
}SL;

2.2 初始化结构体 (SeqListInit)

我们知道,要正确的进行的初始化结构体,我们就需要传递SL 的地址,通过指针来对结构体的内容进行修改。这是因为实参在传参的时候,会形成一个份临时拷贝,叫做形参。当我们在函数中对形参的内容进行修改时,形参的改变是不会影响到实参的。

//顺序表初始化
void SeqListInit(SL* ps)
{
    assert(ps);    
	ps->a = NULL;
	ps->size = 0;
    ps->capacity = 0;
}

2.3 检查结构体中的数组是否需要扩容  (SeqListCheckCapacity)   

当顺序表需要插入数据时,可能会遇到三种情况:  
整个顺序表没有空间 
空间不够,需要扩容
空间足够,直接插入数据
 1)如果顺序表空间足够,那么不需要扩容,通过相关操作插入数据
 2)如果空间不足或者根本没有空间,那么就得扩容。
      2.1)当顺序表没有空间时,我们开辟四个空间
      2.2)当顺序表空间不足,我们将当前空间扩大为两倍(扩两倍是为了防止扩容过度,或扩小了       频繁扩容,消耗过大。

//检查内存大小,不够就扩容
void SeqListCheckCapacity(SL* ps)
{
	// 如果没有空间或者空间不足,那么我们就扩容
	if (ps->size == ps->capacity)
	{
		int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		SLDataType* tmp = (SLDataType*)realloc(ps->a, newcapacity * sizeof(SLDataType));
		if (tmp == NULL)
		{
			printf("realloc fail\n");
			exit(-1);
		}

		ps->a = tmp;
		ps->capacity = newcapacity;
	}
}

2.4  尾插(SeqListPushBack)

只需在容量充足的时候,在最后插入一个数据即可。

void SeqListPushBack(SL* ps, SLDataType x)
{
	SeqListCheckCapacity(ps);

	ps->a[ps->size] = x;
	ps->size++;

}

2.5尾删 (SeqListPopBack)

要注意:当顺序表没有元素时,也就是 sz 为 0 时,不可以进行删除

举例: 假如顺序表有 5 个数据,此时我们尾删 6 个数据,那么这时,我们顺序表的 size = -1。此时程序不会报错,因为本身就没有数据可以删除,但是让我们在进行尾插的时候,程序就会报错啦,因为尾插数据会访问 size 的下表 -1 此时出现了越界访问,程序就出现了错。


解决方案 : 我们可以加入断言(assert)进行判断,也可以采用if语句,以防止size 的下标越界 

//尾删
void SeqListPopBack(SL* ps)
{
	// 温柔处理方式
	if (ps->size > 0)
	{
		ps->a[ps->size - 1] = 0;
		ps->size--;
	}

	// 暴力处理方式
	assert(ps->size > 0);
	ps->size--;
}

2.6 头插(SeqListPushFront)

头插原理 :头插就是将数据放在下标为 0 的地方 其余数据依次向后挪一位。

此时出现两种情况:

再向后挪数据的过程中,
(1)先从第一个数据开始挪动(不能)
(2)先从最后一个数据开始挪动

如果我们先从第一个数据开始挪动那么可能会出现下面的情况:
 

 我们发现会发生数据覆盖。所以第一种情况不能使用

再看(2)先从最后一个数据开始挪动:

非常符合我们的预想,所以我们可以使用

//头插
void SeqListPushFront(SL* ps, SLDataType x)
{
	SeqListCheckCapacity(ps);

	// 挪动数据
	int end = ps->size - 1;
	/while (end >= 0)
	{
        ps->a[end + 1] = ps->a[end];
		--end;
	}
	ps->a[0] = x;
    ps->size++;

}

2.7 头删(SeqListPopFront)

头删原理:头删就是将下标为 0 的数据删除,其余数据依次向前挪动,采用与头插相反的方式即可,即先从下标为 1 的数据向前挪动,而先从最后一个数据向前挪动(不能)

//头删
void SeqListPopFront(SL* ps)
{
	assert(ps->size > 0);

	// 挪动数据
	int begin = 0;
	while (begin < ps->size-1)
	{
		ps->a[begin] = ps->a[begin+1];
		++ begin;
	}

	int begin = 1;
	while (begin < ps->size)
	{
		ps->a[begin-1] = ps->a[begin];
		++begin;
	}

	ps->size--;

}

2.8 在指定位置插入数据(SeqListInsert)

注:要实现这一功能,我们依然需要一个end下标,数据从后往前依次后挪,直到pos下标移动完毕

另外,检查容量。

// 指定pos下标位置插入
void SeqListInsert(SL* ps, int pos, SLDataType x)
{
	// 温柔的处理方式
	/*if (pos > ps->size || pos < 0)
	{
		printf("pos invalid\n");
		return;
	}*/
	// 粗暴的方式
	assert(pos >= 0 && pos <= ps->size);

	SeqListCheckCapacity(ps);

	// 挪动数据
	int end = ps->size - 1;
	while (end >= pos)
	{
		ps->a[end + 1] = ps->a[end];
		--end;
	}

	ps->a[pos] = x;
	ps->size++;
}

注:该功能其实也可以实现头插和尾插,所以我们可以在头插和尾插中复用该功能

尾插:

void SeqListPushBack(SL* ps, SLDataType x)
{

	SeqListInsert(ps, ps->size, x);
}

头插:

void SeqListPushFront(SL* ps, SLDataType x)
{

	SeqListInsert(ps, 0, x);
}

2.9在指定位置删除数据(SeqListErase)

注 :要实现这一功能,我们需要一个begin下标,数据从后往前依次后挪,直到sz-1下标移动完毕。

// 删除pos位置的数据
void SeqListErase(SL* ps, int pos)
{
	assert(pos >= 0 && pos < ps->size);

	int begin = pos + 1;
	while (begin < ps->size)
	{
		ps->a[begin - 1] = ps->a[begin];
		++begin;
	}

	ps->size--;
}

注:该功能其实也可以实现头删和尾删

尾删

//尾删
void SeqListPopBack(SL* ps)
{

	SeqListErase(ps, ps->size - 1);
}

头删

//头删
void SeqListPopFront(SL* ps)
{
	assert(ps->size > 0);

	SeqListErase(ps, 0);
}


2.10 查找某一个数据的位置(SeqListFind)

遍历查找便可

int SeqListFind(SL* ps, SLDataType x)
{
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->a[i] == x)
		{
			return i;
		}
	}

	return -1;
}

2.11打印顺序表(SeqListPrint)

 把各元素依次打印便可

//打印顺序表
void SeqListPrint(SL* ps)
{
	for (int i = 0; i < ps->size; ++i)
	{
		printf("%d ", ps->a[i]);
	}
	printf("\n");
}

2.12销毁顺序表(SeqListDestory)

需要把顺序表所开辟的空间释放掉,防止内存泄漏


//销毁顺序表
void SeqListDestory(SL* ps)
{
	free(ps->a);
	ps->a = NULL;
	ps->capacity = ps->size = 0;
}

三 .顺序表完整代码

SeqList.h  

#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

typedef int SLDataType;

// 动态顺序表
typedef struct SeqList
{
	SLDataType* a;
	int size;      // 表示数组中存储了多少个数据
	int capacity;  // 数组实际能存数据的空间容量是多大 
}SL;


// 接口函数 -- 命名风格是跟着STL走的,建议大家也跟着我们上课走,方便后续学习STL
void SeqListPrint(SL* ps);
void SeqListInit(SL* ps);
void SeqListDestory(SL* ps);

void SeqListCheckCapacity(SL* ps);
void SeqListPushBack(SL* ps, SLDataType x);
void SeqListPopBack(SL* ps);
void SeqListPushFront(SL* ps, SLDataType x);
void SeqListPopFront(SL* ps);

// 找到了返回x位置下标,没有找打返回-1
int SeqListFind(SL* ps, SLDataType x);
// 指定pos下标位置插入
void SeqListInsert(SL* ps, int pos, SLDataType x);
// 删除pos位置的数据
void SeqListErase(SL* ps, int pos);

SeqList.c  

#define _CRT_SECURE_NO_WARNINGS
#include "SeqList.h"

//打印顺序表
void SeqListPrint(SL* ps)
{
	for (int i = 0; i < ps->size; ++i)
	{
		printf("%d ", ps->a[i]);
	}
	printf("\n");
}

//顺序表初始化
void SeqListInit(SL* ps)
{
	ps->a = NULL;
	ps->size = ps->capacity = 0;
}

//销毁顺序表
void SeqListDestory(SL* ps)
{
	free(ps->a);
	ps->a = NULL;
	ps->capacity = ps->size = 0;
}

//检查内存大小,不够就扩容
void SeqListCheckCapacity(SL* ps)
{
	// 如果没有空间或者空间不足,那么我们就扩容
	if (ps->size == ps->capacity)
	{
		int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
		SLDataType* tmp = (SLDataType*)realloc(ps->a, newcapacity * sizeof(SLDataType));
		if (tmp == NULL)
		{
			printf("realloc fail\n");
			exit(-1);
		}

		ps->a = tmp;
		ps->capacity = newcapacity;
	}
}

//尾插
void SeqListPushBack(SL* ps, SLDataType x)
{
	/*SeqListCheckCapacity(ps);

	ps->a[ps->size] = x;
	ps->size++;*/
	SeqListInsert(ps, ps->size, x);
}

//尾删
void SeqListPopBack(SL* ps)
{
	// 温柔处理方式
	//if (ps->size > 0)
	//{
	//	//ps->a[ps->size - 1] = 0;
	//	ps->size--;
	//}

	// 暴力处理方式
	/*assert(ps->size > 0);
	ps->size--;*/

	SeqListErase(ps, ps->size - 1);
}

//头插
void SeqListPushFront(SL* ps, SLDataType x)
{
	//SeqListCheckCapacity(ps);

	 挪动数据
	//int end = ps->size - 1;
	//while (end >= 0)
	//{
	//	ps->a[end + 1] = ps->a[end];
	//	--end;
	//}
	//ps->a[0] = x;
	//ps->size++;

	SeqListInsert(ps, 0, x);
}

//头删
void SeqListPopFront(SL* ps)
{
	assert(ps->size > 0);

	// 挪动数据
	//int begin = 0;
	//while (begin < ps->size-1)
	//{
	//	ps->a[begin] = ps->a[begin+1];
	//	++ begin;
	//}

	//int begin = 1;
	//while (begin < ps->size)
	//{
	//	ps->a[begin-1] = ps->a[begin];
	//	++begin;
	//}

	//ps->size--;

	SeqListErase(ps, 0);
}

int SeqListFind(SL* ps, SLDataType x)
{
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->a[i] == x)
		{
			return i;
		}
	}

	return -1;
}

// 指定pos下标位置插入
void SeqListInsert(SL* ps, int pos, SLDataType x)
{
	// 温柔的处理方式
	/*if (pos > ps->size || pos < 0)
	{
		printf("pos invalid\n");
		return;
	}*/
	// 粗暴的方式
	assert(pos >= 0 && pos <= ps->size);

	SeqListCheckCapacity(ps);

	// 挪动数据
	int end = ps->size - 1;
	while (end >= pos)
	{
		ps->a[end + 1] = ps->a[end];
		--end;
	}

	ps->a[pos] = x;
	ps->size++;
}

// 删除pos位置的数据
void SeqListErase(SL* ps, int pos)
{
	assert(pos >= 0 && pos < ps->size);

	int begin = pos + 1;
	while (begin < ps->size)
	{
		ps->a[begin - 1] = ps->a[begin];
		++begin;
	}

	ps->size--;
}

Test.c

#define _CRT_SECURE_NO_WARNINGS
#include "SeqList.h"

void TestSeqList1()
{
	SL sl;
	SeqListInit(&sl);
	SeqListPushBack(&sl, 1);
	SeqListPushBack(&sl, 2);
	SeqListPushBack(&sl, 3);
	SeqListPushBack(&sl, 4);
	SeqListPushBack(&sl, 5);
	SeqListPrint(&sl);

	SeqListPopBack(&sl);
	SeqListPopBack(&sl);
	SeqListPopBack(&sl);
	SeqListPopBack(&sl);
	SeqListPopBack(&sl);
	//SeqListPopBack(&sl);
	//SeqListPopBack(&sl);
	SeqListPrint(&sl);

	SeqListPushFront(&sl, 10);
	SeqListPushFront(&sl, 20);
	SeqListPushFront(&sl, 30);
	SeqListPushFront(&sl, 40);
	SeqListPrint(&sl);

	SeqListPushBack(&sl, 10);
	SeqListPushBack(&sl, 20);
	SeqListPrint(&sl);

	SeqListDestory(&sl);
}

void TestSeqList2()
{
	SL sl;
	SeqListInit(&sl);
	SeqListPushBack(&sl, 1);
	SeqListPushBack(&sl, 2);
	SeqListPushBack(&sl, 3);
	SeqListPushBack(&sl, 4);
	SeqListPushBack(&sl, 5);
	SeqListPrint(&sl);

	SeqListPushFront(&sl, 10);
	SeqListPushFront(&sl, 20);
	SeqListPushFront(&sl, 30);
	SeqListPushFront(&sl, 40);
	SeqListPrint(&sl);

	SeqListPopFront(&sl);
	SeqListPopFront(&sl);
	SeqListPrint(&sl);

	SeqListDestory(&sl);
}

void menu()
{
	printf("1 尾插数据------2 尾删数据\n");
	printf("\n");
	printf("3 头插数据------4 头删数据\n");
	printf("\n");
	printf("5 在任意位置插入数据\n");
	printf("\n");
	printf("6 在任意位置删除数据\n");
	printf("\n");
	printf("7 查找某个数据的位置,并删除它\n");
	printf("\n");
	printf("8 打印数据\n");
	printf("\n");
	printf("-1 退出\n");
	printf("\n");
}

int main()
{
	int option = 0;
	SL s;
	SeqListInit(&s);
	do
	{
		menu();
		printf("请输入你的操作:>>>>>>  ");
		scanf("%d", &option);
		int sum = 0;
		int x = 0;
		int y = 0;
		int z = 0;
		int pos = 0;
		int w = 0;
		switch (option)
		{
		case 1:
			printf("请依输入尾插的数据:(-1结束)\n");
			scanf("%d", &sum);
			while (sum != -1)
			{
				SeqListPushBack(&s, sum);    // 1.尾插
				scanf("%d", &sum);
			}
			break;
		case 2:
			SeqListPopBack(&s);             // 2.尾删
			break;
		case 3:
			scanf("%d", &x);
			SeqListPushFront(&s, x);       // 3.头插
			break;
		case 4:
			SeqListPopFront(&s);           // 4.头删
			break;
		case 5:
			SeqListInsert(&s, 3, 20);     // 5.在任意位置插入数据
			break;
		case 6:
			SeqListErase(&s, 3);          // 6.在任意位置删除数据
			break;
		case 7:
			printf("请输入要删除的数字\n");
			scanf("%d", &z);
			y = SeqListFind(&s, z);                      // 7.查找某个数字的位置,并且删除它
			printf("%d的位置在%d处: \n", z, y);
			if (y != -1)
			{
				SeqListErase(&s, y);
			}
			break;
		case 8:
			SeqListPrint(&s);
			break;
		default:
			if (option == -1)
			{
				exit(0);  // 退出程序 
			}
			else
			{
				printf("输入错误,请重新输入\n");
			}
			break;

		}
	} while (option != -1);   // 退出程序

	SeqListDestory(&s);

	return 0;
}

以上就是有关顺序表的实现,如果对大家有所帮助就行,感谢。

顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!文章来源地址https://www.toymoban.com/news/detail-446559.html

到了这里,关于顺序表的实现 (C语言)从0到1,还有视频帮助理解,事半功倍!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】顺序表的实现及基本操作完整代码(C语言实现)

    顺序表:逻辑上相邻的数据元素,其物理次序也是相邻的 这里之所以要把int分别创建新名字为SqlElemType和Status,是因为实际应用时数据的类型不一定是int型,这样设置方便修改元素类型,提高代码适用性。 LocateElem的时间复杂度为O(n) InsertSq的时间复杂度为O(n) DeleteSq的时间

    2024年04月12日
    浏览(41)
  • 数据结构(C语言实现)——顺序表的介绍及基本操作的实现

    今天我们来学习数据结构中的线性表,本文主要介绍一种常见的线性表——顺序表。 本文着重介绍顺序表的概念以及顺序表各种基本操作的实现过程(C语言实现),以后会更新更多的数据结构,觉得有用的朋友可以三连关注一波,一起学习。 线性表(linear list)是n个具有相

    2023年04月13日
    浏览(41)
  • 【数据结构】线性表的顺序存储结构及实现——C语言版

    线性表的顺序存储结构称为 顺序表 ,其基本思想是 用一段地址连续的存储单元一次存储线性表的数据元素。 设顺序表的每个元素占用 c 个存储单元,则第 i 个元素的存储地址为: 所以, 只要确定了存储顺序表的起始地址(即基地址),计算任意一个元素的存储地址的时间

    2024年03月15日
    浏览(39)
  • [C语言][数据结构][动态内存空间的开辟]顺序表的实现!

    目录 零.必备知识 a.顺序表的底层是数组. b.数组在内存中是连续存放的. c.动态内存空间的开辟(malloc,calloc,realloc). 一.顺序表的定义与实现          1.1 顺序表的定义          1.2 顺序表的初始化          1.3 顺序表的销毁          1.4 顺序表容量的检查与调整

    2024年04月09日
    浏览(71)
  • C语言中实现顺序表的插入、删除和更新操作(附带源码)

    C语言中,顺序表是一种线性表的存储结构,可以通过数组来实现。以下是顺序表的插入、删除和更新操作的基本示例: 删除操作: 更新操作: 这些示例代码演示了如何在C语言中实现顺序表的插入、删除和更新操作。你可以根据需要进行修改和扩展。 希望你也学会了,更多

    2024年01月24日
    浏览(32)
  • 数据结构-顺序表的基本实现(C语言,简单易懂,含全部代码)

    今天起开始编写数据结构中的各种数据结构及算法的实现,说到顺序表,我们首先得了解下线性表。 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻

    2023年04月08日
    浏览(30)
  • 掌握Java JDK 1.8 API帮助文档中文版,事半功倍编程

    引言: Java是一门强大且广泛应用的编程语言,在开发过程中,准确地了解和使用Java标准库的API是非常重要的。JDK(Java Development Kit)是Java开发工具包,提供了丰富的API文档,其中包含了Java标准库中各种类和方法的详细说明。本文将为您介绍如何使用JDK 1.8 API帮助文档的中文

    2024年02月07日
    浏览(31)
  • 数据结构中: 一元多项式的运算(相加,相减,相乘)------用C语言 / C++来实现。 数据结构线性表的操作和应用(顺序存储)

    线性表的操作和应用(顺序存储)。用顺序存储实现一元多项式,并进行加、减、乘运算。 (1)一元多项式结构体创建  (2)初始化 (3)一元多项式赋值             (4)打印一元多项式 (5)加法运算                        (6)减法运算 (7)乘法运算    全部代

    2024年02月01日
    浏览(41)
  • c语言基础知识帮助理解(详解数组)

    前面梳理完函数和递归的知识后,来进行数组知识的梳理 对函数有疑惑的同学,可以看我之前的文章:c语言基础知识帮助理解(详解函数)_总之就是非常唔姆的博客-CSDN博客  c语言基础知识帮助理解(函数递归详解)_总之就是非常唔姆的博客-CSDN博客 想做点游戏的同学可以

    2024年02月14日
    浏览(31)
  • c语言基础知识帮助理解(详解函数)

    目录 1. 函数是什么 2. 库函数  3. 自定义函数  4. 函数参数  4.1实际参数(实参)  4.2形式参数(形参)  5.函数的调用 5.1传值调用 5.2传址调用 (传递地址) 6. 函数的嵌套调用和链式访问  6.1 嵌套调用  6.2 链式访问  7. 函数的声明和定义  7.1 函数声明  7.2函数定义 函数是

    2024年02月14日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包