自学内容网 自学内容网

【C语言零基础入门篇 - 14】:顺序表

顺序表


线性表简介

线性表:线性表是数据结构的一种。
一个线性表是 n 个具有相同特性的数据元素的有限序列。(数组也是线性表)
线性表中数据元素之间是一对一的关系。

线性表主要有顺序表、链表以及栈和队列。

顺序表的基本概念

什么是顺序表?
顺序表是一种数据结构,结构是将数据依次存放在地址连续的存储单元中。

顺序表的存储特点是:
1、存储元素的地址是连续的
2、通过对首地址的偏移,可访问所有元素

顺序表的定义

顺序表的结构定义(数组):

int arr[100] ;//可以存放100个元素的顺序表
int len = 0 ;//当前元素的个数
int maxSize = 100 ;//最多能存多少个元素

顺序表的结构定义(指针):

int *buff = NULL ;//顺序表
int len = 0 ; //元素个数
int maxSize = 0 ; //最大容量

顺序表的结构定义(结构体):

typedef int Type //类型的定义
struct Array{
Type *data;//数据域(存储数据的空间)
int length; //顺序表的长度
};

顺序表的功能实现

顺序表的基本操作:增、删、改、查。
用指针实现以下顺序表的基本操作:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define _CRT_SECURE_NO_WARNINGS

//分配内存空间
void fun(int**p, int*maxSize) // p=&buff;*p=buff
{
printf("请输入内存空间大小:");
scanf("%d", maxSize);
*p = (int*)malloc(*maxSize*sizeof(int));
//给分配的内存空间赋初值
memset(*p, 0, *maxSize*sizeof(int)); //逐字节初始化
}

//添加数据
void Add_data(int**p, int*maxSize, int*len)
{
int data = 0;
printf("请输入添加的数据:");
scanf("%d", &data);

if (*len >= *maxSize) //如果数据量超过最大内存空间
{
*maxSize = *maxSize + *maxSize / 2;
int*temp = (int*)malloc(*maxSize*sizeof(int)); //申请更大的内存空间
//将数据复制到临时指针变量
for (int j = 0; j < *len; j++)
{
temp[j] = (*p)[j];
}
free(*p); //释放buff的内存空间
*p = temp; //将buff指向temp
}
(*p)[*len] = data;
(*len)++; //因为* 和 +的优先级都是二级,从右往左进行运算
}

//打印结果
void printData(int**p, int len)
{
for (int i = 0; i < len; i++)
{
printf("%d\t", (*p)[i]);
}
printf("\n");
}

//删除数据
void deleteData(int**p, int*len)
{
int data = 0;
printf("请输入要删除的数据:");
scanf("%d", &data);

for (int i = 0; i < *len; i++)
{
if ((*p)[i] == data) //如果找到要删除的数据
{
for (int j = i; j < *len; j++)
{
(*p)[j] = (*p)[j + 1];
}
(*len)--; //数据长度减一
printf("删除 %d 成功,位置:%d\n", data, i+1);
return; //退出函数
}
}
printf("不存在 %d!\n", data); //没找到要删除的数据
}

//修改数据
void modifyData(int**p, int len)
{
int data = 0;
int val = 0;
printf("请输入要修改的数据:");
scanf("%d", &data);
printf("请输入修改后的值:");
scanf("%d", &val);

for (int j = 0; j < len; j++)
{
if ((*p)[j] == data) //如果找到该数据
{
(*p)[j] = val; //修改数据
printf("数据 %d 已被修改,位置:%d\n", data, j+1);
return; //退出函数
}
}
printf("未找到该数据!\n"); //如果找不到该数据
}

//查找数据
void findData(int*p, int len) //p = buff
{
int data = 0;
printf("请输入查找的数据:");
scanf("%d", &data);

for (int j = 0; j < len; j++)
{
if (p[j] == data) //找到数据
{
printf("元素值:%d,位置:%d\n", data, j + 1);
return;
}
}
printf("未找到该数据!\n");
}

int main()
{
int *buff = NULL; //定义一个指针
int len = 0; //长度
int maxSize = 0; //最大内存
int data = 0;
fun(&buff, &maxSize);

Add_data(&buff, &maxSize, &len);
Add_data(&buff, &maxSize, &len);
Add_data(&buff, &maxSize, &len);

printData(&buff, len);

deleteData(&buff, &len);
printData(&buff, len);
deleteData(&buff, &len);
printData(&buff, len);

modifyData(&buff, len);
printData(&buff, len);

findData(buff, len);
findData(buff, len);
}

原文地址:https://blog.csdn.net/Oh_Python/article/details/142343507

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!