张小五学算法与数据结构第三天:线性表的顺序存储结构
2018-01-28 18:15
495 查看
今天是元气满满的第三天,外面下了很大的雪,估计明天没法去自习室啦,所以今天只是简单的写一下今天学习的内容,大部分会留到明天写一个上下出来。
线性表的顺序存储结构的含义是将线性表L=(a0,a1,.....,an-1)中的各元素依次存储于计算机一片连续的存储空间。这种结构表示为线性表的顺序存储结构。
对数据元素ai的存取为随机存取和按地址存取;
存储密度高。存储密度D约等于1;
但是顺序表需要一片连续的内存空间有时需要满足要求的空间可能比较少,并且它对表的插入和删除等运算的时间复杂度较差。
头文件sqlist.h:
运行结果为:
一、线性表是什么?
线性表作为一种基本数据结构类型,在计算机存储中的映像(或表示)一般有两种形式,一种是顺序映像,一种是链式映像。线性表的顺序存储结构的含义是将线性表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; }
运行结果为:
相关文章推荐
- 张小五学算法与数据结构第二天:数据结构和线性表概述
- 数据结构和算法笔记 lesson3 线性表顺序存储结构
- 数据结构与算法之——线性表的顺序存储结构
- 张小五学算法与数据结构第四天(上):线性表的链式存储结构
- 张小五学算法与数据结构第四天(下):线性表的链式存储结构练习题
- 【算法和数据结构】_9_线性结构_队列_续_1
- 【算法和数据结构】_9_线性结构_队列_续_1
- 数据结构--线性表 算法函数的实现(实现线性表的删除操作)
- 数据结构学习笔记 --- 线性表 (一些常见的关于链表的算法和面试题)
- 数据结构与算法_1:线性表顺序存储结构常见操作
- 数据结构一一线性表的顺序存储结构之删除操作
- 数据结构与算法之——线性表的链式存储结构
- 【算法和数据结构】_17_小算法_线性结构:顺序表
- 数据结构和算法 C/C++ Java 和 C# 版 - (2)线性表 精准表述 实现
- 【算法和数据结构】_7_线性结构_字符串_模式匹配
- 数据结构:线性表之顺序存储结构
- 数据结构与算法——线性结构——线性表及其表示
- 算法与数据结构--实现线性表的合并操作(合并后按非递减排列)
- 《数据结构》(C语言版)——线性表的动态分配顺序存储结构
- 【数据结构】线性表的顺序存储结构