顺序表

数据结构学习总结 栈和队列

你离开我真会死。 提交于 2019-12-01 09:00:31
一,顺序栈的基本操作 同 顺序表 和 链表 一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如 图 1 所示。 图 1 栈存储结构示意图   从图 1 我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 "存" 和 "取" 的过程有特殊的要求: 1,栈只能从表的一端存取数据,另一端是封闭的,如图 1 所示; 2,在栈中,无论是存数据还是取数据,都必须遵循"先进后出"的原则,即最先进栈的元素最后出栈。拿图 1 的栈来说,从图中数据的存储状态可判断出,元素 1 是最先进的栈。因此,当需要从栈 中取出元素 1 时,根据"先进后出"的原则,需提前将元素 3 和元素 2 从栈中取出,然后才能成功取出元素 1。      因此,我们可以给栈下一个定义,即栈是一种只能从表的一端存取数据且遵循 "先进后出" 原则的线性存储结构。    通常,栈的开口端被称为 栈顶 ,封口端被称为 栈底 ; 因此,栈顶元素指的就是距离栈顶最近的元素,拿图 2 来说,栈顶元素为元素 4;同理,栈底元素指的是位于栈最底部的元素,图 2 中的栈底元素为元素 1。                                                图 2 栈顶和栈底 进栈和出栈 基于 栈结构的特点,在实际应用中,通常只会对栈执行以下两种操作: 向栈中添加元素,此过程被称为"进栈"

c语言实现顺序表的基本操作

不打扰是莪最后的温柔 提交于 2019-12-01 06:59:03
转自 https://www.cnblogs.com/rookiefly/p/3425075.html 原作者:Step by Step 经过三天的时间终于把顺序表的操作实现搞定了。(主要是在测试部分停留了太长时间) 1;线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素。 2;采用的实现方式:一段地址连续的存储单元可以用固定数组或者动态存储结构来实现,这里采用动态分配存储结构。 3;顺序表的定义及操作集合:头文件为defs.h 1 #ifndef _DEFS_H 2 #define _DEFS_H 3 4 #include<stdio.h> 5 #include<stdlib.h> 6 #include<malloc.h> 7 8 #define LIST_INIT_MAX 10 //长表为10 9 #define LIST_INCREMENT 2 //短表为2 10 typedef struct 11 { 12 int * elem; //采用动态存储分配结构 13 int length; 14 int listsize; 15 }sqlist; 16 //线性表操作集合 17 void InitList(sqlist *L); //初始化,动态分配一块存储空间 18 void DestroyList(sqlist *L); /

数据结构之顺序表的操作

这一生的挚爱 提交于 2019-12-01 05:05:12
/* 时间:2019年10月11日22:09:45 说明:函数的形参以struct Arr*类型, 因为指针变量只占4个字节, 如果传入的形参是struct Arr类型,struct Arr所占字节大于4个,内存更浪费了 */ #include<stdio.h> #include<malloc.h> #include<stdlib.h> //定义了一个数据类型,该数据类型的名字叫struct Arr,该数据类型含有三个成员,分别是pBase,len,cnt; struct Arr{ int* pBase;//存储的是数组第一个元素的地址 int len; //数组所能容纳的最大元素的个数 int cnt;//当前数组有效元素的个数 }; void init_arr(struct Arr *,int length); //初始化数组 bool append_arr(struct Arr*,int val);//追加元素到末尾 bool insert_arr(struct Arr*,int position,int val); //在position位置插入val值,position的值从1开始 bool delete_arr(struct Arr*,int position,int *pVal); //删除第position个元素,position从1开始 int get();

3664=顺序表应用7:最大子段和之分治递归法

[亡魂溺海] 提交于 2019-11-30 19:49:14
1 #include <stdio.h> 2 #include <stdlib.h> 3 int a[60000],c=0; 4 int i; 5 int max(int m,int n) 6 { 7 if(m>n)return m; 8 else return n; 9 } 10 int sum(int ii,int jj) 11 { 12 int maxsum=0; 13 c++; 14 if(ii==jj) 15 { 16 if(a[ii]>0)maxsum=a[ii]; 17 else 18 { 19 maxsum=0; 20 } 21 } 22 else 23 { 24 int mid=(ii+jj)/2; 25 int lsum=sum(ii,mid); 26 int rsum=sum(mid+1,jj); 27 int ss,s1,s2; 28 s1=ss=0; 29 for(i = mid; i>=ii; --i) 30 { 31 ss+=a[i]; 32 if(ss>s1)s1 = ss; 33 } 34 s2 = ss = 0; 35 for(i = mid+1; i<=jj; ++i) 36 { 37 ss+=a[i]; 38 if(ss>s2)s2 = ss; 39 } 40 maxsum=s1+s2; 41 maxsum=max(maxsum,lsum);

3325=顺序表应用2:多余元素删除之建表算法

女生的网名这么多〃 提交于 2019-11-30 18:25:59
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int main() 5 { 6 int m,i,j,k,p,mark=1; 7 int math[10000]; 8 scanf("%d",&m); 9 while(m--) 10 { 11 int n; 12 p=0; 13 scanf("%d",&n); 14 for(i=0; i<n;i++) 15 { 16 scanf("%d",&k); 17 for(j=0; j<p; j++) 18 { 19 if(k==math[j]){ 20 mark=0; 21 break; 22 } 23 24 } 25 if(mark==1)math[p++]=k; 26 mark=1; 27 } 28 for(i=0; i<p; i++) 29 { 30 if(i!=0)printf(" "); 31 printf("%d",math[i]); 32 } 33 printf("\n"); 34 } 35 return 0; 36 } 来源: https://www.cnblogs.com/Angfe/p/11634823.html

3324=顺序表应用1:多余元素删除之移位算法

社会主义新天地 提交于 2019-11-30 18:22:39
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 int main() 5 { 6 int m,i,j,k; 7 int math[10000]; 8 scanf("%d",&m); 9 while(m--){ 10 int n; 11 scanf("%d",&n); 12 for(i=0;i<n;i++){ 13 scanf("%d",&math[i]); 14 } 15 for(i=0;i<n-1;i++){ 16 for(j=i+1;j<n;j++){ 17 if(math[i]!=math[j]); 18 else for(k=j;k<n;k++){ 19 math[k]=math[k+1]; 20 n--; 21 i--; 22 } 23 } 24 } 25 for(i=0;i<n;i++){ 26 if(i!=0)printf(" "); 27 printf("%d",math[i]); 28 } 29 printf("\n"); 30 } 31 return 0; 32 } 来源: https://www.cnblogs.com/Angfe/p/11634769.html

(java实现)顺序表-ArrayList

六月ゝ 毕业季﹏ 提交于 2019-11-30 15:47:32
什么是顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。 在使用顺序表存储数据前,会先申请一段连续的内存空间(即数组),然后把数组依次存入内存,中间没有一点空隙。 基本操作 每个数据结构都有集合对数据处理的方法,这能让我们更方便的使用保存在数据结构中的数据。顺序表的基本操作有:增(add),删(remove),改(set),查(find),插(insert)等。 在这里我们只详细讲解remove 和 insert 操作,其他实现可看下面的源码。 顺序表删除元素 从顺序表中删除指定元素,实现起来非常简单,只需找到目标元素,并将其后续所有元素整体前移 1 个位置即可。 后续元素整体前移一个位置,会直接将目标元素删除,可间接实现删除元素的目的。 例如:从顺序表{1,2,3,4,5}中删除元素3的过程如下 时间复杂度分析:从顺序表中删除元素,最好的情况是删除的元素刚好是最后一个元素,这时候不需要移动元素,只需要把顺序表的size-1即可,时间复杂度是O(1)。最坏的情况是删除的元素刚好是第一个元素,这个时候就需要后面的元素全部向前移动一位,同时size-1,时间复杂度是O(N)。我们分析时间复杂度的原则是分析最坏情况,这样才有意义。因此删除操作的时间复杂度为O(N)。 顺序表插入元素 向已有顺序表中插入数据元素

C语言实现顺序表

妖精的绣舞 提交于 2019-11-30 13:33:18
大二学习数据结构和算法啦,因为之前用Java语言实现过,所以理解起来还是比较轻松,就是理解数组与结构体的运用。废话不多说,上代码! 结构体 typedef struct { int *data; int Maxsz; int len; } SeqList; 初始化 void InitList (SeqList *L, int maxsz) {//初始化 L->Maxsz = maxsz; L->data = (int*)malloc(sizeof(int)*maxsz);//动态分配存储空间,相当于 new L->len = 0; } 增删改查插 int AddList(SeqList *L, int x) { //增加 if(L->len >= L->Maxsz) { return 0; } L->data[L->len] = x; L->len++; return 1; } int DelList(SeqList *L, int index) {//删除 if(index >= L->Maxsz) { return 0; } int i=0; for(i = index; i < L->Maxsz; i++) { L->data[i] = L->data[i+1]; } L->len--; return 1; } int Update(SeqList *L, int oldda

顺序表SqList(动态)

做~自己de王妃 提交于 2019-11-30 11:57:26
动态顺序表SqList,严蔚敏《数据结构》第二章-顺序表-配套代码,完整如下 (已调试通过): # ifndef SEQUENCELIST_H # define SEQUENCELIST_H # include <stdio.h> # include <stdlib.h> //提供malloc、realloc、free、exit原型 /* 宏定义 */ # define TRUE 1 //真 # define FALSE 0 / 来源: https://blog.csdn.net/qq_42815188/article/details/101317644

04-2_Python中的线性表

▼魔方 西西 提交于 2019-11-30 08:39:42
Python中的顺序表 Python中的list(列表)和tuple(元组)两种类型采用了顺序表的实现技术 tuple是不可变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似 listr的基本实现技术 Python标准类型list就是一种元素个数可变的线性表,可以加入和删除元素,并在各种操作中维持已有元素的顺序(即保序) 在Python的官方实现中, list就是一种采用分离式技术实现的动态顺序表 。这就是为什么用list.append(x) (或 list.insert(len(list), x),即尾部插入)比在指定位置插入元素效率高的原因。 在Python的官方实现中,list实现采用了如下的策略:在建立空表(或者很小的表)时,系统分配一块能容纳8个元素的存储区;在执行插入操作(insert或append)时,如果元素存储区满就换一块4倍大的存储区。但如果此时的表已经很大(目前的阀值为50000),则改变策略,采用加一倍的方法。引入这种改变策略的方式,是为了避免出现过多空闲的存储位置。 来源: https://www.cnblogs.com/nichengshishaonian/p/11576095.html