您的位置:首页 > 理论基础 > 数据结构算法

张小五学算法与数据结构第三天:线性表的顺序存储结构

2018-01-28 18:15 495 查看
今天是元气满满的第三天,外面下了很大的雪,估计明天没法去自习室啦,所以今天只是简单的写一下今天学习的内容,大部分会留到明天写一个上下出来。

一、线性表是什么?

线性表作为一种基本数据结构类型,在计算机存储中的映像(或表示)一般有两种形式,一种是顺序映像,一种是链式映像。
线性表的顺序存储结构的含义是将线性表L=(a0,a1,.....,an-1)中的各元素依次存储于计算机一片连续的存储空间。这种结构表示为线性表的顺序存储结构。

二、顺序表的特点

逻辑上相邻的两个元素,其存储位置也是相邻的;
对数据元素ai的存取为随机存取和按地址存取;
存储密度高。存储密度D约等于1;
但是顺序表需要一片连续的内存空间有时需要满足要求的空间可能比较少,并且它对表的插入和删除等运算的时间复杂度较差。

三、顺序表的基本运算

在这里我只写出建空表,置空表,插入元素和打印表元素的代码,其他代码类似,只需要稍加改动即可。
头文件sqlist.h:
#ifndef SQLIST_H_
#define SQLIST_H_

#define maxsize 1024 //线性表的最大长度
typedef struct{      //表的类型
int data[maxsize]; //表的存储空间
int last;
}sqlist, *sqlink;  //表说明符

void CreateList(sqlink L); //建空表
void ClearList(sqlink L);  //置空表
int GetList(sqlink L, int num); //根据序号取表元素
int LengthList(sqlink L);//求表长
int InsertList(sqlink L,int data,int num);//插入元素
int DeleteList(sqlink L,int num);//删除元素
int LocateList(sqlink L,int data);//定位元素
int EmptyList(sqlist L);//判空表;
void PrintList(sqlink L);//打印表元素
#endif // SQLIST_H_
sqlist.c:

#include "sqlist.h"

//建空表
void CreateList(sqlink L){
int tempNo=1;
int tempData=0;
do{
printf("请输入顺序表第%d个元素(输入-1结束): ",tempNo);
scanf("%d",&tempData);
if(tempData!=-1){
L->data[tempNo-1]=tempData;
L->last=tempNo-1;
tempNo++;
}
}while(tempNo<maxsize&&tempData!=-1);
}
//求表长
int LengthList(sqlink L){
int s;
s = L->last;
s = s+1;
return s;
}
//打印表元素
void PrintList(sqlink L){
printf("打印出的的线性表为:\n");
int i;
for(i=0;i<LengthList(L);i++){
printf("%d ",L->data[i]);
}
printf("\n");
}
//插入元素
int InsertList(sqlink L,int data,int num){
int j;
if(L->last>maxsize-1){
printf("该线性表已经没有空间了!\n");
return -1;
}else if(num< 0 || num>L->last+1){
printf("您输入的位置有误!\n");
return -1;
}else{
for(j=L->last;j>=num;j--){
L->data[j+1] = L->data[j];
}
L->data[num] = data;
L->last++;
return 0;
}

}

//置空表
void ClearList(sqlink L){
char in ='n';
printf("你是否要置空表?Y:是,N:否");
scanf("%c",&in);
if(in=='y'||in=='Y'){
L->last = -1;
PrintList(L);
}else if(in=='n'||in=='N'){
PrintList(L);
}else{
printf("请输入正确的字母!");
ClearList(L);
}
}
主函数 main.c:
#include "sqlist.h"
#include "sqlist.c"
int main(int argc,char *argv[]){
sqlink L=(sqlink)malloc(sizeof(sqlist));
CreateList(L);
PrintList(L);
int data,x,y;
printf("请输入需要插入的数据和位置:\n");
scanf("%d %d",&data,&x);
//InsertList(L,data,x-1);
y = InsertList(L,data,x-1);
if(y==0){
printf("新表为:\n");
PrintList(L);
}else{
PrintList(L);
}
return 0;
}


运行结果为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: