欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 数据结构:顺序表

数据结构:顺序表

2024/10/24 17:33:13 来源:https://blog.csdn.net/2302_81442125/article/details/140543646  浏览:    关键词:数据结构:顺序表

数据结构是计算机存储、组织数据的方式。使用数据结构会大大提高程序运行的效率。

1、顺序表的概念及结构

线性表是n个具有相同属性的数据元素的有限序列。常见的线性表有顺序表,单链表,栈,队列...

线性表是逻辑上是连续的,但物理结构上不一定是连续的,线性表在物理上存储时,通常以数组或链式结构的形式存储。

顺序表底层结构是数组,对数组的封装。

顺序表的分类:

  • 静态顺序表:
typedef int SLDataType;
#define N 10
typedef struct SeqList
{SLDatatype a[N];int size;
}SL;

缺陷:空间给少了不够用,给多了浪费空间。

  • 动态顺序表:
typedef int SLDataList;
typedef struct SeqList
{SLDataList*a;int size;//有效数据个数int capacity;//容量
}SL;

可以增容。

 2、动态顺序表的实现

 

3、顺序表的应用

基于动态顺序表实现通讯录

这里要结合顺序表的文件,要把typedef int SLDataType改为typedef personInfo SLDataType,personInfo为结构体。

 4、顺序表的算法

移除元素:

int removeElement(int* nums, int numsSize, int val) {int j=0;for(int i=0;i<numsSize;i++){if(nums[i]!=val){nums[j]=nums[i];j++;}}return j;
}
int removeElement(int* nums, int numsSize, int val)
{int* temp = (int*)malloc(sizeof(int)*numsSize);if(NULL == temp){return 0;}int count = 0;for(int i = 0; i < numsSize; ++i){if(nums[i] != val){temp[count] = nums[i];++count;}}memcpy(nums, temp, sizeof(int)*count);free(temp);return count;
}

两种算法。 

 合并两个有序数组:

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) 
{int x=m-1;int y=n-1;int z=m+n-1;while(x>=0&&y>=0){if(nums1[x]<nums2[y]){nums1[z--]=nums2[y--];}else{nums1[z--]=nums1[x--];}}while(y>=0)nums1[z--]=nums2[y--];
}

5、顺序表的问题

1、中间/头部的插入删除,时间复杂度为O(N)

2、增容需要申请空间,拷贝数据,释放空间,会有不小的消耗

3、如果数据不算多,增容会浪费空间

上述问题导致顺序表可能不会受大家的青睐。

谢谢大家观看!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com