顺序表、线性表

1.线性表 

概念:

一个线性表是n个具有相同特性的数据元素的有限序列,线性表中数据元素之间的关系是一对一的关系。

特点:

①有且只有一个元素没有前驱元素---首元素/头元素

②有且只有一个元素没有后继元素--尾元素

线性表存储:

连续式存储:用连续的存储单元存储顺序表(数组形式)

不连续性:用不连续的存储单元存储不连续的链表(链式存储)

2.顺序表

概念:

用连续的存储单元存储一个线性表

特点:

①连续的存储单元---采用数组形式

②不改变线性表数据元素的逻辑次序

优点:

①不改变逻辑存储顺序

②地址连续(连续存储),可以通过计算得到任意地址,访存速度快,可以实现随机访问

③要素:首元素地址、单元偏移(下标)

缺点:

①要占据大块的连续空间

②插入删除不方便

3.分配数组

形式:

定义数组:数据类型 数组名[元素个数]

(从高址向低址找,以每个数据类型占据的字节数为一个偏移单位计算,元素个数只能是常量)

int和float均为4字节数据类型

②动态分配地址

malloc(元素个数*sizeof(数据类型));

返回的地址类型不对是void型的,应该进行强制类型转换

int*p;p = (数据类型*)malloc(元素个数*sizeof(数据类型));

注意:指针a指向数组首元素不动

​ sizeof里面的数据类型是单元类型,强制类型转换的数据类型后面加了*是单元的地址类型

练习:定义一块有8个元素的整形数组,并输入数据,通过函数AvgArray(int *a)返回数组的平均值

(定义数组可以初始化给值,malloc动态分配内存的数组只能scanf手动输入)

#include<stdio.h> #include<stdlib.h> int main(){ int *a;//定义指针 //分配动态数组 a = (int *)malloc(8*sizeof(int)); int i; for(i=0;i<8;++i){ scanf("%d",a+i); } double AvgArray(int *a,int n){ double result=0.0; for(i=0;i<n;i++){ result += a[i]; } return result/n; } printf("%f\n",AvgArray(a,8)); }


实现:

1.顺序表的查找(顺序查找)

:设有顺序表Data(无序、无重复值),给定关键字key,在顺序表中查找关键字key的数据元素,若找到返回下标,未找到则返回-1

#include<stdio.h>#include<stdlib.h> intFindElem(int*a,intn,intkey){// int i,n=-1;// for(i=0;i<n;i++){// if(a[i] == key){// n = i;// break;// }// }// return n;// int i;// for(i=0;i<n;){// if(a[i]==key) break;// else i++;// }// if(i<n) return i;// else return -1;// int i;// for(i=0;i<n;i++){// if(a[i]==key) break;// }// if(i<n) return i;// else return -1;// int i;// for(i=0;i<n;i++){// if(a[i]==key) break;// }// return i<n?i:-1;inti;for(i=0;i-1)printf("Yes!\n");elseprintf("No!\n");printf("%d\n",R);return0;}

2.顺序表的删除

:将顺序表中给定的关键字key的对应的数据元素从顺序表中删除

#include<stdio.h>#include<stdlib.h>int DelKeyElem(int a[],int n,int key){int i,j;for(i=0;i<n&&a[i]!=key;++i);if(i<n){for(j=i;j<n-1;++j){ a[j]=a[j+1]; } n--; } return n; } int main(void){ int Data[8]={2,5,7,8,4,9,10}; int key,n,i; printf("请输入一个数字key:"); scanf("%d",&key); int DelKeyElem(int *a,int n,int key); n = DelKeyElem(Data,7,key); for(i=0;i<n;i++){ printf("%3d",Data[i]); } //free*Data; return 0; }

C语言种输出形式

%c:单个字符

%x:十六进制整数

%d:十进制整数

%f :十进制浮点数

%o:八进制数

%s :字符串

%u:无符号十进制数

%%:输出百分号%

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容