数据结构学习笔记——顺序表的基本操作(超详细最终版+++)建议反复看看ヾ(≧▽≦*)o

article/2025/9/14 23:48:15

目录

  • 前言
  • 一、顺序表的相关知识点
  • 二、顺序表的定义
  • 三、顺序表的初始化
  • 四、顺序表的建立
  • 五、顺序表的输出
  • 六、顺序表的逆序输出
  • 七、顺序表的插入操作
  • 八、顺序表的删除操作
  • 九、顺序表的按位和按值查找
  • 基本操作的完整代码
  • 十*、顺序表删除的常用操作
  • 十一*、顺序表的常用合并操作

前言

以下所有代码都经过测试,编译运行软件:Dev-C++ 5.11,若有表述和代码错误感谢指出!!!


一、顺序表的相关知识点

(一)顺序存储和链式存储
通过顺序存储的线性表称为顺序表,它是将线性表中所有元素按照其逻辑顺序,依次存储到指定存储位置开始的一块连续的存储空间里;而通过链式存储的链表中,每个结点不仅包含该元素的信息,还包含元素之间的逻辑关系的信息。

  • 顺序表实现简单,可以随机存取,其存储密度大,但是执行插入、删除操作需要移动大量元素,效率低,另外其存储空间需事先分配,容易造成空间浪费或溢出。
  • 链表不支持随机存取,只能顺序存取,通过指针来体现元素之间的逻辑关系,存储密度比顺序表小,其执行插入、删除操作不需要移动元素,只需修改指针,效率高,另外它还支持动态分配存储空间,不会造成空间浪费或溢出。

(二)顺序表的插入操作
1、最好情况
若在顺序表的表尾插入元素,则不需要执行元素后移操作,即最好情况,所以最好时间复杂度为O(1)
2、最坏情况
若在顺序表的表头插入元素,需要执行n次元素后移操作,即最坏情况,所以最坏时间复杂度为O(n)
3、平均情况
设在顺序表第i个位置插入元素的概率为pi=1/(n+1),即在长度为n的线性表中插入一个结点,所需移动元素的平均次数为:
1 n + 1 ∑ i = 1 n + 1 ( n − i + 1 ) = 1 n + 1 n ( n + 1 ) 2 = n 2 \frac{1}{n+1} \sum_{i=1}^{n+1} (n-i+1)=\frac{1}{n+1}\frac{n(n+1)}{2}=\frac{n}{2} n+11i=1n+1(ni+1)=n+112n(n+1)=2n
平均情况下,所需移动元素的平均次数为n/2,故顺序表插入操作的平均时间复杂度为O(n)
(三)顺序表的删除操作
1、最好情况
若删除顺序表的表尾元素,则不需要执行元素后移操作,即最好情况,所以最好时间复杂度为O(1),与顺序表的插入操作的最好情况一样。
2、最坏情况
若删除顺序表的表头元素,则执行n次移动操作,即最坏情况,所以最坏时间复杂度为O(n),与顺序表的插入操作的最坏情况一样。
3、平均情况
设删除顺序表第i个位置上元素的概率为pi=1/n,即在长度为n的线性表中删除一个结点,若删除第一个结点需移动n-1次,……,删除第n个结点移动0次:
1 n ∑ i = 1 n ( n − i ) = 1 n n ( n − 1 ) 2 = n − 1 2 \frac{1}{n} \sum_{i=1}^{n} (n-i)=\frac{1}{n}\frac{n(n-1)}{2}=\frac{n-1}{2} n1i=1n(ni)=n12n(n1)=2n1
平均情况下,所需移动元素的平均次数为(n-1)/2,故顺序表的删除操作的平均时间复杂度为O(n)

二、顺序表的定义

以下操作均为顺序表的静态分配,所以其大小和空间是固定的,可通过MaxSize设置顺序表的最大长度。

#include<stdio.h>
#define MaxSize 10	//可自行更改最大长度
typedef struct {int data[MaxSize];	//元素int length;			//顺序表的当前长度
} SqList;		//顺序表的类型定义

三、顺序表的初始化

设置顺序表的初始长度为0,即L.length=0。

/*初始化顺序表*/
void InitList(SqList L) {L.length=0;
}

四、顺序表的建立

/*顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}

五、顺序表的输出

顺序表的输出,依次遍历从头到尾输出顺序表中各元素的值,即通过一个for循环,条件<L.length(顺序表的总长度),每次输出元素。

/*顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}

结合以上功能函数,如下,创建一个顺序表,长度为6,其功能是创建一个顺序表并输入元素,再通过函数调用依次输出各元素,数据元素依次为2,6,0,-1,4,8,如下完整代码:

#include<stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
} SqList;/*1、初始化顺序表*/
void InitList(SqList L) {L.length=0;
}/*2、顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}/*3、顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}//主函数
int main() {SqList L;InitList(L);CreatList(L);printf("顺序表为:\n"); DispList(L);
}

首先输入要创建顺序表中的元素个数,然后依次输入各数据元素,最后输出该顺序表,运行结果如下:
在这里插入图片描述

六、顺序表的逆序输出

顺序表的逆序输出也就是交换通过折半法,交换数据元素,然后也是通过调用DispList()函数依次遍历顺序表输出。

/*将顺序表中的所有元素逆置并输出*/
void ReverseList(SqList L) {int temp;for(int i=0; i<L.length/2; i++) {temp=L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}DispList(L);	//调用输出函数
}

例如,接上一个例子,不过这次是逆序输出顺序表,如下完整代码:

#include<stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
} SqList;/*1、初始化顺序表*/
void InitList(SqList L) {L.length=0;
}/*2、顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}/*3、顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}/*4、将顺序表中的所有元素逆置并输出*/
void ReverseList(SqList L) {int temp;for(int i=0; i<L.length/2; i++) {temp=L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}DispList(L);
}//主函数
int main() {SqList L;InitList(L);CreatList(L);printf("逆序输出顺序表:\n");ReverseList(L);
}

运行结果如下:
在这里插入图片描述

七、顺序表的插入操作

顺序表的插入操作以位序进行插入元素,这里要注意位序是从1开始的,而c语言中的数组下标是从0开始的,这一点在插入操作中要明白,这里加了一个if语句判断输入的插入位置是否合法,若不合法则会返回false,插入后,要将其后的元素后移,最后数组长度加1。

/*顺序表的插入操作 (在L的位序i处插入元素e)*/
bool ListInsert(SqList &L,int i, int e) {if (i<1||i>L.length||L.length>=MaxSize)		//在[1,length+1]内有效且未存满或等于最大长度return false;		//插入失败返回 falsefor(int j=L.length; j>=i; j--)	//j变量等于顺序表的长度L.data[j]=L.data[j-1];	//将要插入的位置,第i个元素及以后的元素后移,先移动后面的元素,即数组下标小的赋给下标大的L.data[i-1]=e;			//由于数组的下标是从0开始的,所以位序要减一,即将要插入的元素e赋值给L.data[i-1]L.length++;		//数组长度加1return true;		//插入成功返回 true
}

例如,向之前所创建好的顺序表的位序为3(数组下标为2)处插入数据元素“7”,如下完整代码:

#include<stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
} SqList;/*1、初始化顺序表*/
void InitList(SqList L) {L.length=0;
}/*2、顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}/*3、顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}/*4、顺序表的插入操作 (在L的位序i处插入元素e)*/
bool ListInsert(SqList &L,int i, int e) {if (i<1||i>L.length||L.length>=MaxSize)		//在[1,length+1]内有效且未存满或等于最大长度return false;		//插入失败返回 falsefor(int j=L.length; j>=i; j--)	//j变量等于顺序表的长度L.data[j]=L.data[j-1];	//将要插入的位置,第i个元素及以后的元素后移,先移动后面的元素,即数组下标小的赋给下标大的L.data[i-1]=e;			//由于数组的下标是从0开始的,所以位序要减一,即将要插入的元素e赋值给L.data[i-1]L.length++;		//数组长度加1return true;		//插入成功返回 true
}//主函数
int main() {SqList L;InitList(L);CreatList(L);printf("当前顺序表为:\n");DispList(L);ListInsert(L,3,7);	//在顺序表L的位序为3处插入数据元素7printf("\n");printf("插入后的顺序表为:\n");DispList(L);
}

运行结果如下:
在这里插入图片描述

八、顺序表的删除操作

顺序表的删除操作同插入操作一样,也是通过位序插入/删除,删除目标元素后,其后的元素要向前移动一格,最后数组长度要减1。

/*顺序表的删除操作 (删除L中第i个位置的元素并引用变量e返回)*/
bool ListDelete(SqList &L,int i,int &e) {if (i<1||i>L.length)	//在[1,length+1]内有效return false; //删除失败返回truee=L.data[i-1];	//将要删除的元素赋值给e,由于是数组所以要i-1for(int j=i; j<L.length; j++)L.data[j-1]=L.data[j];	//将要删除的位置,第i个元素后的元素前移,先移动前面的元素,即下标大的赋值给下标小的L.length--;		//数组长度减1return true; 	//删除成功返回true
}

例如对创建的顺序表,删除第4个元素(位序为4),然后输出顺序表,完整代码如下:

#include<stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
} SqList;/*1、初始化顺序表*/
void InitList(SqList L) {L.length=0;
}/*2、顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}/*3、顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}/*4、顺序表的删除操作 (删除L中第i个位置的元素并引用变量e返回)*/
bool ListDelete(SqList &L,int i,int &e) {if (i<1||i>L.length)	//在[1,length+1]内有效return false; //删除失败返回truee=L.data[i-1];	//将要删除的元素赋值给e,由于是数组所以要i-1for(int j=i; j<L.length; j++)L.data[j-1]=L.data[j];	//将要删除的位置,第i个元素后的元素前移,先移动前面的元素,即下标大的赋值给下标小的L.length--;		//数组长度减1return true; 	//删除成功返回true
}//主函数
int main() {SqList L;int a;int e=0;	//初始化e的值 InitList(L);CreatList(L);printf("当前顺序表为:\n");DispList(L);printf("\n");printf("请输入想删除的元素位置:\n",a);scanf("%d",&a);if (ListDelete(L,a,e))printf("已删除顺序表中第%d个元素,其元素值为%d\n",a,e);elseprintf("输入的位序i不合法,删除操作失败!\n");printf("当前顺序表为:\n");DispList(L);return 0;
}

运行结果如下:
在这里插入图片描述

九、顺序表的按位和按值查找

顺序表的按位查找是以数组下标进行查找的,所以位序要减1,即L.data[i-1]。

/*顺序表的按位查找 (获取L中第i个位置元素的值)*/
int GetElem(SqList L,int i) {return L.data[i-1];		//立即找到第i个元素
}

顺序表的按值查找是,查找L中第一个元素值等于e的元素,它会依次沿着顺序表向后查找,找到后返回其位序。

/*顺序表的按值查找 (查找L中第一个元素值等于e的元素并返回其次序)*/
int LocateElem(SqList L,int e) {for(int i=0; i<L.length; i++) 	//依次从前往后查找if(L.data[i]==e)return i+1;	//数组下标为i的元素值为e,返回其位序i+1(数组从0开始)return 0;	//未找到元素,退出循环查找失败
}

例如对创建的顺序表,查询顺序表中第3个位置的数据元素,另外查询顺序表中第一个元素值等于“4”的数据元素,其完整代码如下:

#include<stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
} SqList;/*1、初始化顺序表*/
void InitList(SqList L) {L.length=0;
}/*2、顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}/*3、顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}/*4、顺序表的按位查找 (获取L中第i个位置元素的值)*/
int GetElem(SqList L,int i) {return L.data[i-1];		//立即找到第i个元素
}/*5、顺序表的按值查找 (查找L中第一个元素值等于e的元素并返回其次序)*/
int LocateElem(SqList L,int e) {for(int i=0; i<L.length; i++) 	//依次从前往后查找if(L.data[i]==e)return i+1;	//数组下标为i的元素值为e,返回其位序i+1(数组从0开始)return 0;	//未找到元素,退出循环查找失败
}//主函数
int main() {SqList L;int a,b;InitList(L);CreatList(L);printf("顺序表为:\n");DispList(L);printf("\n");printf("按位查找第3个元素的值:\n");a=GetElem(L,3);printf("%d \n",a);printf("按值查找值为4的元素:\n");b=LocateElem(L,4);printf("%d \n",b);
}

运行结果如下:
在这里插入图片描述

基本操作的完整代码

以上顺序表基本操作的完整代码如下:

#include<stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
} SqList;/*1、初始化顺序表*/
void InitList(SqList L) {L.length=0;
}/*2、顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}/*3、顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}/*4、将顺序表中的所有元素逆置并输出*/
void ReverseList(SqList L) {int temp;for(int i=0; i<L.length/2; i++) {temp=L.data[i];L.data[i]=L.data[L.length-i-1];L.data[L.length-i-1]=temp;}DispList(L);	//调用输出函数
}/*5、顺序表的插入操作 (在L的位序i处插入元素e)*/
bool ListInsert(SqList &L,int i, int e) {if (i<1||i>L.length||L.length>=MaxSize)		//在[1,length+1]内有效且未存满或等于最大长度return false;		//插入失败返回 falsefor(int j=L.length; j>=i; j--)	//j变量等于顺序表的长度L.data[j]=L.data[j-1];	//将要插入的位置,第i个元素及以后的元素后移,先移动后面的元素,即数组下标小的赋给下标大的L.data[i-1]=e;			//由于数组的下标是从0开始的,所以位序要减一,即将要插入的元素e赋值给L.data[i-1]L.length++;		//数组长度加1return true;		//插入成功返回 true
}/*6、顺序表的删除操作 (删除L中第i个位置的元素并引用变量e返回)*/
bool ListDelete(SqList &L,int i,int &e) {if (i<1||i>L.length)	//在[1,length+1]内有效return false; //删除失败返回truee=L.data[i-1];	//将要删除的元素赋值给e,由于是数组所以要i-1for(int j=i; j<L.length; j++)L.data[j-1]=L.data[j];	//将要删除的位置,第i个元素后的元素前移,先移动前面的元素,即下标大的赋值给下标小的L.length--;		//数组长度减1return true; 	//删除成功返回true
}/*7、顺序表的按位查找 (获取L中第i个位置元素的值)*/
int GetElem(SqList L,int i) {return L.data[i-1];		//立即找到第i个元素
}/*8、顺序表的按值查找 (查找L中第一个元素值等于e的元素并返回其次序)*/
int LocateElem(SqList L,int e) {for(int i=0; i<L.length; i++) 	//依次从前往后查找if(L.data[i]==e)return i+1;	//数组下标为i的元素值为e,返回其位序i+1(数组从0开始)return 0;	//未找到元素,退出循环查找失败
}

十*、顺序表删除的常用操作

  1. 删除顺序表中的最小值
  2. 删除顺序表中的所有特定值的元素
  3. 删除顺序表值在特定区间的元素
  4. 删除顺序表中重复元素
  5. 删除有序表中重复元素

具体的实现步骤感兴趣的小伙伴可以看之前这篇文章:
数据结构学习笔记:顺序表的删除操作及其演化题目总结

十一*、顺序表的常用合并操作

  1. 顺序表的合并操作
    若要将两个顺序表的数据元素合并,通过创建一个CombineList1()函数,将顺序表L1和顺序表L2分别添加至顺序表L3中,该函数中包含三个参数,分别是SqList L1,SqList L2,SqList &L3(顺序表L3由于被更改,所以要用引用符号),如下:
bool CombineList1(SqList L1,SqList L2,SqList &L3) {
...
}

只需设置一个while()循环,条件是该顺序表的长度,每次将该顺序表的值赋给最终顺序表,且每次循环变量都加1,如下:

while(i<L1.length)L3.data[k++]=L1.data[i++];
while(j<L2.length)L3.data[k++]=L2.data[j++];

该算法的完整代码:

/*合并两个顺序表*/
bool CombineList1(SqList L1,SqList L2,SqList &L3) {InitList(L3);int i=0,j=0;int k = 0;while(i<L1.length)L3.data[k++]=L1.data[i++];while(j<L2.length)L3.data[k++]=L2.data[j++];L3.length=k;return true;
}

例如,创建两个顺序表L1、L2,顺序表L1的数据元素依次为4、5、0、2、-1;顺序表L2的数据元素依次为8、1、4、7、2,将这两个顺序表合并为顺序表L3,并最后输出顺序表L3:
代码如下:

#include<stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
} SqList;/*1、初始化顺序表*/
void InitList(SqList L) {L.length=0;
}/*2、顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}/*3、顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}/*4、合并两个顺序表*/
bool CombineList1(SqList L1,SqList L2,SqList &L3) {InitList(L3);int i=0,j=0;int k = 0;while(i<L1.length)L3.data[k++]=L1.data[i++];while(j<L2.length)L3.data[k++]=L2.data[j++];L3.length=k;return true;
}//主函数
int main() {SqList L1,L2,L3;int a,b;InitList(L1);InitList(L2);InitList(L3);printf("建立第一个顺序表!\n");CreatList(L1);DispList(L1);printf("\n");printf("建立第二个顺序表!\n");CreatList(L2);DispList(L2);printf("\n");printf("合并后的顺序表如下:\n");CombineList1(L1,L2,L3);DispList(L3);
}

运行结果如下:
在这里插入图片描述

  1. 有序顺序表的合并操作
    若要将两个有序顺序表的数据元素合并,我们则要对上述代码进行修改,即按顺序依次取两个顺序表较小的数据元素存入新的顺序表中,然后对剩余的数据元素再添加至新的顺序表的后面,创建一个函数CombineList2():
bool CombineList2(SqList L1,SqList L2,SqList &L3) {
...
}

该算法的完整代码如下:

/*5、合并有序顺序表*/
bool CombineList2(SqList L1,SqList L2,SqList &L3) {if(L1.length+L2.length>MaxSize)return false;int i=0,j=0;int k = 0;InitList(L3);while(i<L1.length&&j<L2.length) {	//对两个顺序表中的元素两两比较,将小者存入结果表 if(L1.data[i]<=L2.data[j])L3.data[k++]=L1.data[i++];elseL3.data[k++]=L2.data[j++];}while(i<L1.length)L3.data[k++]=L1.data[i++];while(j<L2.length)L3.data[k++]=L2.data[j++];L3.length=k;return true;
}

注:该代码参考《王道 数据结构 考研复习指导》
例如,创建两个有序顺序表L1、L2,有序顺序表L1的数据元素依次为-5、0、3、7;有序顺序表L2的数据元素依次为1、7、10,将这两个有序顺序表合并为有序顺序表L3,并最后输出有序顺序表L3:
代码如下:

#include<stdio.h>
#define MaxSize 10
typedef struct {int data[MaxSize];int length;
} SqList;/*1、初始化顺序表*/
void InitList(SqList L) {L.length=0;
}/*2、顺序表的建立*/
void CreatList(SqList &L) {printf("请输入建立顺序表的元素个数:\n");scanf("%d",&L.length);for(int i=0; i<L.length; i++) {int number=i+1;printf("请输入第%d个整数:\n",number);scanf("%d",&L.data[i]);}
}/*3、顺序表的输出(从头到尾输出顺序表中各元素的值)*/
void DispList(SqList L) {for(int i=0; i<L.length; i++)printf("%d ",L.data[i]);
}/*4、合并有序顺序表*/
bool CombineList2(SqList L1,SqList L2,SqList &L3) {if(L1.length+L2.length>MaxSize)return false;int i=0,j=0;int k = 0;InitList(L3);while(i<L1.length&&j<L2.length) {	//对两个顺序表中的元素两两比较,将小者存入结果表 if(L1.data[i]<=L2.data[j])L3.data[k++]=L1.data[i++];elseL3.data[k++]=L2.data[j++];}while(i<L1.length)L3.data[k++]=L1.data[i++];while(j<L2.length)L3.data[k++]=L2.data[j++];L3.length=k;return true;
}//主函数
int main() {SqList L1,L2,L3;int a,b;InitList(L1);InitList(L2);InitList(L3);printf("建立第一个有序顺序表!\n");CreatList(L1);DispList(L1);printf("\n");printf("建立第二个有序顺序表!\n");CreatList(L2);DispList(L2);printf("\n");printf("合并后的有序顺序表如下:\n");CombineList2(L1,L2,L3);DispList(L3);
}

运行结果如下:
在这里插入图片描述
后续更新分割线……
请添加图片描述


http://chatgpt.dhexx.cn/article/0mTKUE7m.shtml

相关文章

数据结构:顺序表的基本操作

线性表的顺序存储顺序表的线性存储示意图C语言定义线性表的顺序存储结构顺序表的基本操作顺序表的基础操作完整代码 线性表的顺序存储 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素&#xff0c;使得线性表在逻辑结构上相邻的元素存储在连续的物…

顺序表的基本操作(C语言)

1.要求 编程实现顺序表的基本操作&#xff0c;并设计一个菜单调用。 ①建立&#xff08;初始化&#xff09;、遍历、取值、查找、插入、删除 ②判空、求元素个数、前驱、后继、置为空表、销毁 2.分析 我们需要去定义一个结构体&#xff08;以下代码的结构体名为SqList),其…

C语言实现顺序表基本操作

1.顺序表初始化 2.顺序表创建 3.求顺序表的长度 4.判断顺序表是否为空 5.向顺序表中插入元素 6.删除顺序表中元素 7.将顺序表翻转 8.将顺序表降序排序 #include<stdio.h> #define MAXSIZE 100//定义顺序表的最大存储个数 typedef struct SqList {int *base;int l…

顺序表基本操作

文章目录 1. 顺序表插入元素2. 顺序表删除元素3. 顺序表查找元素4. 顺序表更改元素 1. 顺序表插入元素 向顺序表中插入数据元素&#xff0c;根据插入位置的不同&#xff0c;可分为以下 3 种情况&#xff1a; 插入到顺序表的表头&#xff1b;在表的中间位置插入元素&#xff1…

顺序表的基本操作

一、实验目的&#xff1a; 1、复习C语言程序设计中的知识。 2、掌握线性表的顺序存储结构的表示和实现方法。 3、掌握顺序表基本操作的算法实现。 二、实验内容&#xff1a; 1&#xff0e;建立顺序表。 2&#xff0e;在顺序表上实现插入、删除和查找等操作。 三、实验要求…

数据结构-顺序表基本操作的实现(含全部代码)

今天起开始编写数据结构中的各种数据结构及其算法的实现。 主要依据严蔚敏版数据结构教材以及王道数据结构考研辅导书。 今天是线性表中的顺序表的实现&#xff0c;主要实现函数如下&#xff0c;读者有需要可以评论&#xff0c;我可以适当加几个。 CreateList(SqList &L…

PTA题目:顺序表基本操作

实现顺序表的基本操作&#xff0c;如初始化、插入、删除、输出等。 注意&#xff1a;顺序表中可有重复元素值。 要求&#xff1a;写出三个基本操作函数ListInsert&#xff0c;ListDelete&#xff0c;ListDeleteElem。 顺序表结构与操作函数接口定义&#xff1a; typedef char…

顺序表的操作,你真的学会了吗?

&#x1f30d;新人小白的博客 ⌛️希望大家多多关注 &#x1f383;以后会经常更新哒~&#x1f648; ⭐️个人主页&#xff1a; 收藏加关注&#xff0c;永远不迷路~ ⭐️ 顺序表的操作 前言一、目的二、步骤1.定义存储表示2. 定义操作函数3.采用菜单样式让操作更加方便清楚。4. …

数据结构——顺序表的基本操作

目录 1.顺序表的定义 2.define和typedef 3.以下所有用到函数的声明 4.建表&#xff0c;为表开放空间 5.建表&#xff0c;并且输入表内的值 6.在L中第i个位置之前查人新的数据元素e&#xff0c;L的长度加1 7.删除L的第i个数据元素&#xff0c;并用e返回其值&#xff0c;L的…

顺序表基本操作算法——基础代码(C语言)

创建一个顺序表&#xff08;数据元素个数为5&#xff09;&#xff0c; 输出顺序表中的所有数据元素 查找第3个位置上的元素 查找元素15是否在顺序表中&#xff0c;如果在&#xff0c;请输出该元素在顺序表中的位置 在顺序表中的第1个位置插入数据0 删除刚刚插入的元素 输出顺序…

顺序表的十个基本操作(全)

目录 一、初始化顺序表 二、插入 三、删除 3.1 按位删除 3.2 按数删除 四、查找 4.1 按位查找 4.2 按数查找 五、修改 5.1 按位修改 5.2 按数修改 六、逆置 七、排序 八、按序插入 九、按序合并 十、最小值 完整代码 一、初始化顺序表 初始化并一个顺序表&am…

数据结构—顺序表基本操作的实现(C语言)

前言 本文介绍线性表顺序存储时基本操作的实现&#xff0c;包括顺序表的结构定义、初始化、插入、删除、销毁、显示、清空、判空、求长度、查找&#xff0c;以及线性表的合并。 主要参考&#xff1a;严蔚敏“数据结构及应用算法教程”教材 代码如下 #include <stdio.h>…

顺序表的基本操作(超详细)

1.顺序表的定义 使用结构体来构造一个顺序表。 typedef struct {int length;//当前顺序表长度int Maxsize;//顺序表最大长度int* data;//定义顺序表中元素类型的数组指针 }SqList;2.顺序表的初始化 顺序表的初始化是使用动态分配数组空间方式构造一个空的线性表。 #include&…

多组比较的非参数检验——K-W检验

作者&#xff1a;丁点helper 来源&#xff1a;丁点帮你 前面我们已经讲完两组比较的非参数检验&#xff0c;类似t检验与方差分析&#xff0c;当比较的数据超过两组时&#xff0c;我们就需要换一个方法了。 非参数K-W检验&#xff0c;相比前文讲解的Mann-Whitney 检验就是这样…

推断统计:参数估计和假设检验

目录 1、总体、个体、样本和样本容量    1&#xff09;总体、个体、样本和样本容量的概念    2&#xff09;本文章使用的相关python库   2、推断统计的概念    1&#xff09;推断统计的概念    2&#xff09;为什么要进行推断统计&#xff1f;   3、参数估计(点…

非参数检验之符号检验、Wilcoxon符号秩检验、游程检验

目录 一、符号检验 例2.1下面是世界上71个大城市的花费指数(包括租金)按递增次序排列如下(这里上海是44位&#xff0c;其指数为63.5&#xff09;&#xff1a; R代码&#xff1a; 二、Wilcoxon符号秩检验 例2.3下面是10个欧洲城镇每人每年平均消费的酒类相当于纯酒精数&…

SPSS非参数检验

系列文章目录 SPSS描述统计 SPSS均值检验 SPSS方差分析 文章目录 系列文章目录前言1 非参数检验提出的背景与特点1.1 背景1.2 特点 2 SPSS分析-非参数检验菜单中的相关功能2.1 卡方检验2.1.1 概述2.1.2 操作流程2.1.3 实例操作 2.2 二项分布检验2.2.1 概述2.2.2 操作流程2.2.3…

入门必学 | R语言参数检验之t检验与方差分析

T检验与方差分析 背景介绍R语言实操过程--t test单样本t检验两个独立样本t检验配对t检验 R语言实操过程--anova单因素方差分析多重比较 双因素方差分析 完整代码 之前与大家分享了数据的独立性、正态性、方差齐性检验。如果还不清楚&#xff0c;大家可以通过这篇推文来学习和理…

R语言对数据进行非参数检验

假设检验&#xff1a;参数检验运用样本的统计量来估计总体的参数&#xff0c;如用样本均值估计总体均值&#xff0c;用样本标准差估计总体标准差。 非参数检验则不考虑数据的具体值&#xff0c;而更多地运用了数据大小排序的信息&#xff0c;因此不可能以此估计总体的参数 1.原…

SPSS参数检验、非参数检验、方差分析

参数检验、非参数检验、方差分析 1.导语2.参数检验2.1 数据分布2.1.1 正态分布1.有总体数据2.没有总体数据&#xff0c;用样本3.统计参数 2.1.2 指数分布1.有总体数据2.没有总体数据&#xff0c;样本3.统计参数 2.2 单样本t检验2.2.1 单样本t检验目的2.2.2 SPSS操作 2.3 两独立…