【C语言数据结构】模拟·顺序表·总项目实现

这篇具有很好参考价值的文章主要介绍了【C语言数据结构】模拟·顺序表·总项目实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【C语言数据结构】模拟·顺序表·总项目实现,数据结构与算法,c语言,数据结构,开发语言

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

前言

我在上一篇博客中,详细讲解啦每一个函数的实现思路和代码展现,在这一篇博客中,我将像是做项目一样,去实现顺序表的总体实现。

一、项目源文件构成

该项目由三部分组成
1️⃣ 用来存放库函数,宏定义,函数申明等的一个头文件:SqList.h
2️⃣ 主函数的所在文件 test.c
3️⃣各个函数的实现,我们主要在此完成函数的代码编写:SqList.c

二、菜单

建立一个菜单是很重要的,菜单能够实现和用户的交互,以便于用户的操作。

代码如下:

void meun()
{
	printf("**************************************************\n");
	printf("*    1.顺序表尾插            2.顺序表尾删        *\n");
	printf("*    3.顺序表头插            4.顺序表头删        *\n");
	printf("*    5.顺序表的查找          6.在pos位置插入x    *\n");
	printf("*    7.删除pos位置的值       8.顺序表的打印      *\n");
	printf("*    0.退出                                      *\n");
	printf("**************************************************\n");
}

三、顺序表结构体

typedef int SLDataType;

typedef struct SeqList
{
	SLDataType* array;
	int size;//当前存储个数
	int capacity;//空间大小

}SL;

四、源文件展示

下面是整个项目的代码:

1.SqList.h

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

#define INT_SIZE 2

typedef int SLDataType;

typedef struct SeqList
{
	SLDataType* array;
	int size;//当前存储个数
	int capacity;//空间大小

}SL;

//顺序表的初始化
void SeqListInit(SL* ps);


// 顺序表尾插
void SeqListPushBack(SL* ps, SLDataType x);


// 顺序表尾删
void SeqListPopBack(SL* ps);


// 顺序表头插
void SeqListPushFront(SL* p, SLDataType x);


// 顺序表头删
void SeqListPopFront(SL* p);


// 顺序表查找
int SeqListFind(SL* p, SLDataType x);


// 顺序表在pos位置插入x
void SeqListInsert(SL* p, size_t pos, SLDataType x);


// 顺序表删除pos位置的值
void SeqListErase(SL* p, size_t pos);


// 顺序表销毁
void SeqListDestory(SL* p);


// 顺序表打印
void SeqListPrint(SL* p);
 

2.SqList.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"SqList.h"
//顺序表的初始化
void SeqListInit(SL* ps)
{
	ps->array = (SLDataType*)malloc(sizeof(SLDataType)*4);
	if (ps->array == NULL)
	{
		perror("malloc failed\n");
		exit(-1);
	}
	ps->size = 0;
	ps->capacity = 4;
}


// 检查空间,如果满了,进行增容
int CheckCapacity(SL* ps)
{
	if (ps->size == ps->capacity)
	{
		SLDataType* tmp = (SLDataType*)realloc(ps->array, (ps->capacity + INT_SIZE)*sizeof(SLDataType));
		if (tmp == NULL)
		{
			perror("扩容失败!\n");
			return 0;
		}
		else
		{
			ps->array = tmp;
			ps->capacity += INT_SIZE;
			printf("扩容成功\n");
			return 1;
		}	
	}
	return 1;
}



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


// 顺序表尾插
void SeqListPushBack(SL* ps, SLDataType x)
{
	if (CheckCapacity(ps) == 0)
	{
		printf("空间已满,插入失败!\n");
	}
	if (CheckCapacity(ps) == 1)
	{
		ps->array[ps->size] = x;
		ps->size ++;
	}
}


// 顺序表尾删
void SeqListPopBack(SL* ps)
{
	if (ps->size < 1)
	{
		printf("已经为空,无元素可删除\n");
		return;
	}
	ps->array[ps->size - 1] = 0;
	ps->size--;
}

// 顺序表头插
void SeqListPushFront(SL* ps, SLDataType x)
{
	//判断空间是否够。
	
	//先挪动
	if (CheckCapacity(ps) == 0)
	{
		printf("空间已满,头插入失败!\n");
	}
	if (CheckCapacity(ps) == 1)
	{
	int end = ps->size - 1;
	while (end>=0)
	{
		ps->array[end + 1] = ps->array[end];
		end--;
	}
	ps->array[0] = x;
	ps->size++;

	}
}


// 顺序表头删
void SeqListPopFront(SL* ps)
{
	int n = 1;
	while (n < ps->size)
	{
		ps->array[n - 1] = ps->array[n];
		n++;
	}
	ps->size--;
}

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


// 顺序表查找
int SeqListFind(SL* ps, SLDataType x)
{
	int i = 0,count=0;
	for (i = 0; i < ps->size - 1; i++)
	{
		if (x == ps->array[i])
		{
			printf("找到啦!下标是%d\n",i);
			count++;
			return i;
		}
	}
	if (count == 0)
	{
		printf("没找到!\n");
		return;
	}
}


// 顺序表在pos位置插入x
void SeqListInsert(SL* ps, size_t pos, SLDataType x)
{
	assert(pos>=0&&pos<ps->size);
	if (CheckCapacity(ps) == 0)
	{
		printf("空间已满,插入失败!\n"); 
	}
	if (CheckCapacity(ps) == 1)
	{
		int end = ps->size - 1 ;
		while (end >= pos)
		{
			ps->array[end + 1] = ps->array[end];
			end--;
		}
		ps->array[pos] = x;
		ps->size++;
	}
}



// 顺序表删除pos位置的值
void SeqListErase(SL* ps, size_t pos)
{
	assert(pos >= 0 && pos < ps->size);
	int n = pos + 1;
	while (n <= ps->size - 1)
	{
		ps->array[n - 1] = ps->array[n];
		n++;
	}
	ps->size--;
}

3.test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"SqList.h"

void meun()
{
	printf("**************************************************\n");
	printf("*    1.顺序表尾插            2.顺序表尾删        *\n");
	printf("*    3.顺序表头插            4.顺序表头删        *\n");
	printf("*    5.顺序表的查找          6.在pos位置插入x    *\n");
	printf("*    7.删除pos位置的值       8.顺序表的打印      *\n");
	printf("*    0.退出                                      *\n");
	printf("**************************************************\n");
}
int main()
{
	int x,pos;
	SL s;
	//初始化
	SeqListInit(&s);
	int input = 0;
	do
	{
		meun();
		printf("请输入你的选择:\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("请输入要尾插的值:");
			scanf("%d", &x);
			SeqListPushBack(&s, x);
			break;
		case 2:
			SeqListPopBack(&s);
			break;
		case 3:
			printf("请输入要头插的值:");
			scanf("%d", &x);
			SeqListPushFront(&s,x);
			break;
		case 4:SeqListPopFront(&s);
			break;
		case 5:
			printf("请输入要查找的值:");
			scanf("%d", &x);
			SeqListFind(&s,x); 
			break;
		case 6:
		{
			printf("请输入要插入的位置和数据(空格分开):");
			scanf("%d %d", &pos,&x);
			SeqListInsert(&s, pos, x);
			break;
		}
		case 7:
			printf("请输入要删除的位置:");
			scanf("%d", &pos);
			SeqListErase(&s,pos); 
			break;
		case 8:
			 SeqListPrint(&s);
			 break;
		case 0:
			SeqListDestory(&s);
			break;
		default:printf("输入有误,请重新输入:\n");
		}
	}while (input);
}

五、运行截图

1.顺序表尾插,头插展示

【C语言数据结构】模拟·顺序表·总项目实现,数据结构与算法,c语言,数据结构,开发语言

2.顺序表的头删

【C语言数据结构】模拟·顺序表·总项目实现,数据结构与算法,c语言,数据结构,开发语言

3.顺序表的尾删

【C语言数据结构】模拟·顺序表·总项目实现,数据结构与算法,c语言,数据结构,开发语言

4.顺序表的查找

【C语言数据结构】模拟·顺序表·总项目实现,数据结构与算法,c语言,数据结构,开发语言

5.在pos位置插入x

【C语言数据结构】模拟·顺序表·总项目实现,数据结构与算法,c语言,数据结构,开发语言

6.在pos位置删除元素

【C语言数据结构】模拟·顺序表·总项目实现,数据结构与算法,c语言,数据结构,开发语言

总结:

本次项目当中遇到许多之气没有注意到的问题,尤其是数组越界问题等等,在接下来学习数据结构预算法是非常重要的,🌈相信自己,踏踏实实走好每一步,梦想终会成为现实! ⛵️文章来源地址https://www.toymoban.com/news/detail-614541.html

到了这里,关于【C语言数据结构】模拟·顺序表·总项目实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 数据结构顺序表(C语言实现)

            从本章开始就是开始数据结构的开端,本章将会写出数据结构中的顺序表的代码实现,多会以注释的方法来描述一些细节(注释是我们程序员必须常用的工具)。         话不多说安全带系好,发车啦(建议电脑观看)。 附:红色,部分为重点部分;蓝颜色为需

    2024年02月10日
    浏览(52)
  • 顺序表—C语言实现数据结构

    本期带大家一起来用C语言代码实现顺序表🌈🌈🌈 顺序表是一段物理地址连续的存储单元,依次存储数据元素的线性结构。分为静态顺序表与动态顺序表。 🍊 🍋 🍒 静态顺序表 :使用定长数组用来存储数据 优点 :操作简单,代码实现容易 缺点 :定长数组很受限制,数

    2023年04月24日
    浏览(39)
  • 【数据结构】C语言实现顺序栈

    大家好,很高兴又和大家见面啦!!! 在上一个篇章中,我们介绍了栈的基本概念,以及栈中的重要术语。通过介绍我们知道了栈的本质也是一种线性表,只不过它是一种操作受限的线性表。因此栈的实现方式与线性表的实现实际上是大同小异的。下面我们就来介绍一下如何

    2024年01月19日
    浏览(42)
  • 【数据结构】C语言实现顺序表(超级详细)

    目录 概念及结构 接口函数实现 顺序表的初始化 容量判断  顺序表尾插  顺序表尾删 顺序表头插 顺序表头删 顺序表查找 顺序表指定位置插入 顺序表指定位置删除 打印顺序表 销毁顺序表 顺序表完整代码 顺序表作为线性表的一种,它是用一段 物理地址连续的存储单元依次

    2024年04月10日
    浏览(36)
  • 【数据结构初阶】二、 线性表里的顺序表(C语言实现顺序表)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】一. 复杂度讲解_高高的胖子的博客-CSDN博客  =======================================

    2024年02月08日
    浏览(44)
  • 【数据结构】线性表的顺序存储结构及实现——C语言版

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

    2024年03月15日
    浏览(54)
  • 【数据结构】详谈队列的顺序存储及C语言实现

    大家好,很高兴又和大家见面啦!!! 在上一篇内容中,我们在介绍完队列的基本概念、重要术语以及基本操作后,又回顾了一下数据结构的三要素——数据的逻辑结构、数据的存储结构以及数据的运算。 队列这种数据结构我们已经介绍了它的逻辑结构以及数据运算的定义

    2024年01月21日
    浏览(74)
  • 【数据结构】顺序表基本操作的实现(C语言)

    🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🐌 个人主页:蜗牛牛啊 🔥 系列专栏:🛹数据结构、🛴C++ 📕 学习格言:博观而约取,厚积而薄发 🌹 欢迎进来的小伙伴,如果小伙伴们在学习的过程中,发现有需要纠正的地方,烦请指正,希望能够与

    2024年02月16日
    浏览(55)
  • 【数据结构】链表OJ题(顺序表)(C语言实现)

    ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿 🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟 🌟🌟 追风赶月莫停留 🌟🌟 🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀 🌟🌟 平芜尽处是春山

    2024年02月05日
    浏览(46)
  • 数据结构初阶之顺序表(C语言实现)

    顺序表是数据结构里面很基础的一类,它是线性表的一种,其它线性表还有链表、栈和队列等,今天来和博主一起学习关于顺序表的知识吧。 顺序表,它分为两类: 动态顺序表 和 静态顺序表 ,这两个表的区别就是 前者的空间不固定 ,是 支持扩容 的,后者的 空间是固定

    2024年02月03日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包