首页 > 其他分享 >【数据结构】学习day 1.1线性表中的顺序表

【数据结构】学习day 1.1线性表中的顺序表

时间:2024-07-19 21:54:34浏览次数:10  
标签:顺序 1.1 int MaxSize length SqList data day 线性表

1  "&"区别(c++)

#include<stdio.h>
void test(int x)
{
    x=2024;
    printf("in test x=%d\n",x);
}
int main()
{
    int x=1;
    printf("before test x=%d\n",x);
    test(x);
    printf("after test x=%d\n",x);
    return 0;
}

before test x=1
in test x=2024
after test x=1

(没有带回参数的结果)

#include<stdio.h>
void test(int &x)
{
    x=2024;
    printf("in test x=%d\n",x);
}
int main()
{
    int x=1;
    printf("before test x=%d\n",x);
    test(x);
    printf("after test x=%d\n",x);
    return 0;
}

before test x=1
in test x=2024
after test x=2024

(带回了参数的修改结果)

2  初始化顺序表(静态分配)(c++)

#include<stdio.h>
#define MaxSize 10//定义最大长度

typedef struct
{
    int data[MaxSize];//用静态数组存放数据元素
    int length;//顺序表的当前长度
}SqList;//顺序表的类型定义

void InitList(SqList &L)//初始化一个顺序表
{
    for(int i=0;i<MaxSize;i++)
        L.data[i]=0;//将所有数据元素设置为0
    L.length=0;//顺序表初始长度为0
}

int main()
{
    SqList L;//声明一个顺序表
    InitList(L);//初始化顺序表
    for(int i=0;i<MaxSize;i++)
        printf("data[%d]为%d\n",i,L.data[i]);//打印顺序表每个元素
    return 0;
}

data[0]为0
data[1]为0
data[2]为0
data[3]为0
data[4]为0
data[5]为0
data[6]为0
data[7]为0
data[8]为0
data[9]为0

3  动态分配顺序表

#include<stdlib.h>//malloc,free函数的头文件
#define InitSize 10//定义最大长度



typedef struct
{
    int *data;//指示动态分配数组的指针
    int MaxSize;//顺序表的最大容量
    int length;//顺序表的当前长度
}SeqList;//顺序表的类型定义



void InitList(SeqList (&L))//初始化一个顺序表
{
    L.data=(int *)malloc(InitSize*sizeof(int));//用malloc函数申请一片连续的存储空间
    L.length=0;//顺序表初始长度为0
    L.MaxSize=InitSize;//最大长度设置为宏定义的值
}



void IncreaseSize(SeqList (&L),int len)//增加动态数组的长度,给L增加len长度
{
    int *p=L.data;
    L.data=(int *)malloc((InitSize+len)*sizeof(int));//扩大空间
    for(int i=0;i<L.length;i++)
        L.data[i]=p[i];//将数据复制到新区域
    L.MaxSize=L.MaxSize+len;//顺序表最大长度增加
    free(p);//释放原来内存空间
}



int main()
{
    SeqList L;//声明一个顺序表
    InitList(L);//初始化顺序表
    //  往顺序表中插入元素
    IncreaseSize(L,5);//增加长度
    return 0;
}

举例 :

#include<stdio.h>
#include<stdlib.h>//malloc,free函数的头文件
#define InitSize 5//定义最大长度
typedef struct
{
	int *data;//指示动态分配数组的指针
    int MaxSize;//顺序表的最大容量
    int length;//顺序表的当前长度
}SeqList;//顺序表的类型定义
void InitList(SeqList (&L))//初始化一个顺序表
{
    L.data=(int *)malloc(InitSize*sizeof(int));//用malloc函数申请一片连续的存储空间
    L.length=0;//顺序表初始长度为0
    L.MaxSize=InitSize;//最大长度设置为宏定义的值
}
void IncreaseSize(SeqList (&L),int len)//增加动态数组的长度,给L增加len长度
{
    int *p=L.data;
    L.data=(int *)malloc((InitSize+len)*sizeof(int));//扩大空间
    for(int i=0;i<L.length;i++)
        L.data[i]=p[i];//将数据复制到新区域
    L.MaxSize=L.MaxSize+len;//顺序表最大长度增加
    free(p);//释放原来内存空间
}
int main()
{
    SeqList L;//声明一个顺序表
    InitList(L);//初始化顺序表
	printf("增加长度前的顺序表\n");
	for(int i=0;i<InitSize;i++)
	{
		L.data[i]=i;
		printf("data[%d]为%d\n",i,L.data[i]);//打印顺序表每个元素
		L.length++;
	}
    IncreaseSize(L,5);//增加长度
	printf("增加长度后的顺序表\n");
	for(int t=0;t<L.MaxSize;t++)
	{
		L.data[t]=t;
		printf("data[%d]为%d\n",t,L.data[t]);//打印顺序表每个元素
		L.length++;
	}
    return 0;
}

 增加长度前的顺序表
data[0]为0
data[1]为1
data[2]为2
data[3]为3
data[4]为4
增加长度后的顺序表
data[0]为0
data[1]为1
data[2]为2
data[3]为3
data[4]为4
data[5]为5
data[6]为6
data[7]为7
data[8]为8
data[9]为9

4   顺序表的插入

#include<stdio.h>
#define MaxSize 10//定义最大长度



typedef struct{
    int data[MaxSize];//用静态数组存放数据元素
    int length;//顺序表的当前长度
}SqList;//顺序表的类型定义



void InitList(SqList &L)//初始化一个顺序表
{
    for(int i=0;i<MaxSize;i++)
        L.data[i]=0;//将所有数据元素设置初始值
    L.length=0;//顺序表初始长度为0
}



bool ListInsert(SqList &L,int i,int e)//在L的位置i插入元素e
{
    if(i<1||i>L.length+1)
        return false;//判断i的范围是否有效
    if(L.length>=MaxSize)
        return false;//当前存储空间已满,不能插入
    for(int j=L.length;j>=i;j--)
        L.data[j]=L.data[j-1];//将第i个元素及之后的元素后移
    L.data[i-1]=e;//位置i放入e
    L.length++;//长度+1
    return true;
}



int main()
{
    SqList L;//声明
    InitList(L);//初始化
    //...插入元素
    ListInsert(L,3,9);//插入
    return 0;
}

举例:

#include<stdio.h>
#define MaxSize 10//定义最大长度
typedef struct
{
	int data[MaxSize];//用静态数组存放数据元素
	int length;//顺序表的当前长度
}SqList;//顺序表的类型定义
void InitList(SqList &L)//初始化一个顺序表
{
	for(int i=0;i<MaxSize;i++)
		L.data[i]=0;//将所有数据元素设置为0
	L.length=0;//顺序表初始长度为0
}
bool ListInsert(SqList &L,int i,int e)//在L的位置i插入元素e
{
	if(i<1||i>L.length+1)
	return false;//判断i的范围是否有效
	if(L.length>=MaxSize)
	return false;//当前存储空间已满,不能插入
	for(int j=L.length;j>=i;j--)
	L.data[j]=L.data[j-1];//将第i个元素及之后的元素后移
	L.data[i-1]=e;//位置i放入e
	L.length++;//长度+1
	return true;
}
int main()
{
	SqList L;//声明一个顺序表
	InitList(L);//初始化顺序表
	printf("插入元素前的顺序表\n");
	for(int t=0;t<6;t++)
	{
		L.data[t]=t;
		printf("data[%d]为%d\n",t,L.data[t]);//打印顺序表每个元素
		L.length++;
	}
	ListInsert(L,3,9);//插入
	printf("插入元素后的顺序表\n");
	for(int i=0;i<L.length;i++)
	{
		printf("data[%d]为%d\n",i,L.data[i]);//打印顺序表每个元素
	}
	return 0;
}

插入元素前的顺序表
data[0]为0
data[1]为1
data[2]为2
data[3]为3
data[4]为4
data[5]为5
插入元素后的顺序表
data[0]为0
data[1]为1
data[2]为9
data[3]为2
data[4]为3
data[5]为4
data[6]为5

5  顺序表的删除

bool ListDelete(SqList &L,int i,int &e)//删除i并且返回e的值
{
	if(i<1||i>L.length)
		return false;//判断i的范围是否有效
	e=L.data[i-1];//将被删除的元素赋值给e
	for(int j=i;j<L.length;j++)
		L.data[j-1]=L.data[j];//将第i个元素之后的元素前移
	L.length--;//长度-1
	return true;
}

举例:

#include<stdio.h>
#define MaxSize 10//定义最大长度
typedef struct
{
	int data[MaxSize];//用静态数组存放数据元素
	int length;//顺序表的当前长度
}SqList;//顺序表的类型定义
void InitList(SqList &L)//初始化一个顺序表
{
	for(int i=0;i<MaxSize;i++)
		L.data[i]=0;//将所有数据元素设置为0
	L.length=0;//顺序表初始长度为0
}
bool ListDelete(SqList &L,int i,int &e)//删除i并且返回e的值
{
	if(i<1||i>L.length)
		return false;//判断i的范围是否有效
	e=L.data[i-1];//将被删除的元素赋值给e
	for(int j=i;j<L.length;j++)
		L.data[j-1]=L.data[j];//将第i个元素之后的元素前移
	L.length--;//长度-1
	return true;
}
int main()
{
	int e;
	SqList L;//声明一个顺序表
	InitList(L);//初始化顺序表
	printf("开始的顺序表\n");
	for(int t=0;t<MaxSize;t++)
	{
		L.data[t]=t;
		printf("data[%d]为%d\n",t,L.data[t]);//打印顺序表每个元素
		L.length++;
	}
	if(ListDelete(L,5,e))//删除
	{
		printf("删除了第5个元素,为%d\n",e);
		printf("删除后的顺序表\n");
		for(int i=0;i<L.length;i++)
		{
			printf("data[%d]为%d\n",i,L.data[i]);
		}
	}
	return 0;
}

开始的顺序表
data[0]为0
data[1]为1
data[2]为2
data[3]为3
data[4]为4
data[5]为5
data[6]为6
data[7]为7
data[8]为8
data[9]为9
删除了第5个元素,为4
删除后的顺序表
data[0]为0
data[1]为1
data[2]为2
data[3]为3
data[4]为5
data[5]为6
data[6]为7
data[7]为8
data[8]为9

6  顺序表的按位查找

int GetElem(SqList &L,int i)
{
	return L.data[i-1];
}

注意数据类型一致,如果GetElem前的类型变为ElemType,结构体指针的类型也要一起变为ElemType。

举例:

#include<stdio.h>
#define MaxSize 10//定义最大长度
typedef struct
{
	int data[MaxSize];//用静态数组存放数据元素
	int length;//顺序表的当前长度
}SqList;//顺序表的类型定义
void InitList(SqList &L)//初始化一个顺序表
{
	for(int i=0;i<MaxSize;i++)
		L.data[i]=0;//将所有数据元素设置为0
	L.length=0;//顺序表初始长度为0
}
int GetElem(SqList &L,int i)
{
	return L.data[i-1];
}
int main()
{
	int e;
	SqList L;//声明一个顺序表
	InitList(L);//初始化顺序表
	printf("顺序表\n");
	for(int t=0;t<MaxSize;t++)
	{
		L.data[t]=t*t;
		printf("data[%d]为%d\n",t,L.data[t]);//打印顺序表每个元素
		L.length++;
	}
	e=GetElem(L,8);
	printf("L中第8个值为%d\n",e);
	return 0;
}

顺序表
data[0]为0
data[1]为1
data[2]为4
data[3]为9
data[4]为16
data[5]为25
data[6]为36
data[7]为49
data[8]为64
data[9]为81
L中第8个值为49

6  顺序表的按值查找

int LocateElem(SqList L,int e)
{
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+1;
		return 0;
}

举例:

#include<stdio.h>
#define MaxSize 10//定义最大长度
typedef struct
{
	int data[MaxSize];//用静态数组存放数据元素
	int length;//顺序表的当前长度
}SqList;//顺序表的类型定义
void InitList(SqList &L)//初始化一个顺序表
{
	for(int i=0;i<MaxSize;i++)
		L.data[i]=0;//将所有数据元素设置为0
	L.length=0;//顺序表初始长度为0
}
int LocateElem(SqList L,int e)
{
	for(int i=0;i<L.length;i++)
		if(L.data[i]==e)
			return i+1;
		return 0;
}
int main()
{
	SqList L;//声明一个顺序表
	InitList(L);//初始化顺序表
	printf("顺序表\n");
	for(int t=0;t<MaxSize;t++)
	{
		L.data[t]=2*t;
		printf("data[%d]为%d\n",t,L.data[t]);//打印顺序表每个元素
		L.length++;
	}
	printf("L中值为10的元素在第%d个位置\n",LocateElem(L,10));
	return 0;
}

顺序表
data[0]为0
data[1]为2
data[2]为4
data[3]为6
data[4]为8
data[5]为10
data[6]为12
data[7]为14
data[8]为16
data[9]为18
L中值为10的元素在第6个位置

7 结构类型的比较

#include<stdio.h>
typedef struct
{
	int n;
	int a;
}p;
void pp()
{
	p i;
	i.n=1;
	i.a=2;
	p t;
	t.n=1;
	t.a=2;
	if(i.n==t.n&&i.a==t.a)
		printf("相等\n");
	else
		printf("不相等\n");
}
int main()
{
	pp();
	return 0;
}

相等

标签:顺序,1.1,int,MaxSize,length,SqList,data,day,线性表
From: https://blog.csdn.net/m0_62883956/article/details/140512399

相关文章

  • python_day7
    数据类型​ 之前数字/字符串类型 之后字典\布尔类型列表类型使用列表的几个函数先建一个列表如name_list=['linda','david','louis','kevin','linda]取值时,直接print(name_list[0])或者选取其他的数字替换0,也可以倒数取-1,-2...,还能[0:2],[-3:]这样进行选取几个......
  • 线性表——链表(c语言)
    链表概念篇示意图1.单向链表2.双向链表3.循环链表4.链表的元素插入5.链表的元素删除代码篇1.链表的定义2.链表的创建3.链表的销毁4.链表的元素插入5.链表的元素删除6.链表的元素查找7.链表下标对应的结点8.链表元素的修改9.链表的打印10.完整代码代码运行效果概......
  • JAVA小白学习日记Day6
    1.List集合:把具有相同属性的东西放在一起,也可以是容器,把有关的东西都放进去。List:List是位于java.util下的一个接口,有序集合(也称为序列)。此界面的用户可以精确控制每个元素在列表中的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并在列表中搜索元素。之前学过的容器......
  • Day 17 二叉树part05
    654.最大二叉树这道题和昨天的根据中序后序遍历构造二叉树比较相似。借鉴那个思路去做就差不多。classSolution{publicTreeNodeconstructMaximumBinaryTree(int[]nums){returnconstruct(nums,0,nums.length);}publicTreeNodeconstruct(int......
  • JavaScript 基础知识 Day01
    一、计算机基础知识1、计算机数据存储单位位(Bit):1bit可以保存一个0或者1(最小的存储单位)字节(Byte):1B=8b千字节(KB):1KB=1024B兆字节(MB):1MB=1024KB吉字节(GB):1GB=1024MB太字节(TB):1TB=1024GB2、关于JavaScript 它是在1952年2月由网景开......
  • 02线性表 - 链表
    这里是只讲干货不讲废话的炽念,这个系列的文章是为了我自己以后复习数据结构而写,所以可能会用一种我自己能够听懂的方式来描述,不会像书本上那么枯燥和无聊,且全系列的代码均是可运行的代码,关键地方会给出注释^_^全文1W+字版本:C++17编译器:Clion2023.3.24暂时只给出代码,不会涉......
  • 【代码随想录训练营第42期 Day3打卡 LeetCode 203.移除链表元素,707.设计链表,206.反转
    一、做题感受今天是打卡的第三天,前两天题目主要考察数组相关知识,现在已经来到了链表的学习。题目共有三道,都是以考察单链表为主,整体来说难度不大,但是思路很灵活,尤其是反转链表的考察,双指针的新用法。今天做题总体感觉不错,能有自己的思考和理解。二、链表相关知识1.常见链表......
  • 初学js Day01
    JavaScript的由来(js)1995年2月发布的,NetscapeNavigator2浏览器开发一种名为LiveScript的脚本语言。为了赶在发布日期前完成LiveScript的开发,Netscape与Sun公司建立了一个开发联盟,共同开发LiveScript。在NetScapeNavigator2发布前夕,网景为了更好地推广这个脚本语言......
  • Day44.MySQL安装及主要文件介绍
    1.MySQL下载网址https://www.mysql.com/2.下载流程:         ......
  • C2. Bessie's Birthday Cake (Hard Version)
    原题链接题解假如\(y=1\)该如何添加?然后逐步推导code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;inta[200005];boolcmp(intx,inty){if(x%2!=y%2)returnx%2<y%2;elsereturnx<y;}voidsolve(){intn,x,y;cin&g......