数据结构(一)线性表
2016-07-15 17:09
337 查看
/** *@author StormMaybin *@Date 2016-07-15 */
每一个成功者都有一个开始。勇于开始,才能找到成功的路。
是时候总结一下数据结构的知识了,总共会分为五篇文章来进行总结
一、 概念
线性表(Linear_list)是最常用也是最简单的数据结构。简言之,一个线性表是n个数据元素的有限序列。线性表是有线性结构的表。什么是线性结构呢?线性结构是n个数据元素的有序集合。它有四个基本特征:1.集合中必存在唯一的一个”第一个元素”;
2.集合中必存在唯一的一个”最后的元素”;
3.除最后元素之外,其它数据元素均有唯一的”后继”;
4.除第一元素之外,其它数据元素均有唯一的”前驱”。
如(a1,a2,a3,…..,an),a1为第一个元素,an为最后一个元素,此集合极为一个线性结构的集合。
相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后驱。
常用的线性结构有:线性表,栈,队列,双队列,数组,链表,串。
那么什么是顺序表呢?
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元,依次存储数据元素的线性结构。顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:* location(ki)=location(k1)+(i-1)len*
![](http://hi.csdn.net/attachment/201109/16/0_1316175943QSHh.gif)
二、功能及实现:
结构体的定义初始化
尾部插入值为x的节点
打印各节点的值
判断节点是否为空
查找值为x的节点的位置
取得i节点的值
在i位置插入x值
删除i位置的节点
1、结构体定义:
# define MAXSIZE 100 typedef int datatype; //结构体的定义 typedef struct list { //数据 datatype a[MAXSIZE]; //整个顺序表的元素数量,为末尾元素的下一位置 int size; }sequence_list;
2、初始化:
//初始化 void init_sequence_list(sequence_list *slt) { slt->size=0; }
3、尾部插值
void insert_sequence_list(sequence_list *slt,datatype x) { if(slt->size == MAXSIZE) { printf("The list is full!\n"); exit(1); } //元素数量增加1 slt->size=slt->size+1; //插入数据 slt->a[slt->size]=x; }
4、打印节点的值:
void print_sequence_list(sequence_list slt) { int i; if(!slt) printf("\nThe list is empty!\n"); else for(i=0;i<slt.size;i++) printf("%5d",slt.a[i]); }
5、判断是否为空:
int is_empty_sequence_list(sequence_list slt) { return(slt.size == 0 ? 0:1); }
6、查找值为x的节点的位置:
int find_num_sequence_list(sequence_list slt,datatype x) { int i=0; while(slt.a[i]!=x && i<slt.size) i++; return(i<slt.size? i:-1); }
7、取得i节点的值:
datatype get_data_pos(sequence_list slt,int i) { if(i < 0 || i >= slt.size) { printf("The position dese not exist!\n"); exit(1); } else return slt.a[i]; }
8、在i位置插入x值:
void insert_pos_sequence_list(sequence_list *slt,int position,datatype x) { int i; if(slt->size==MAXSIZE) { printf("\nThe list is full!\n"); exit(1); } if(position < 0 || position > slt->size) { printf("\nThe position does not exist!"); exit(1); } for(i=slt->size;i>position;i--) slt->a[i]=slt->a[i-1]; slt->a[position]=x; slt->size++; }
9、 删除i位置的节点:
void delete_pos_sequence_list(sequence_list *slt,int position) { int i; if(slt->size == 0) { printf("The list is empty!\n");exit(1); } if(position < 0 || position >= slt->size) { printf("The position does not exist!\n"); exit(1); } for(i=position;i<slt->size-1;i++) slt->a[i]=slt->a[i+1]; slt->size--; }
相关文章推荐
- 我是运营,我没有假期
- 注册表的组织结构
- DB2数据库的安装
- C#实现把指定数据写入串口
- “传奇”图象数据存储方式
- Ruby on Rails所构建的应用程序基本目录结构总结
- C#数据结构之顺序表(SeqList)实例详解
- 修复mysql数据库
- Lua教程(七):数据结构详解
- SQLSERVER的非聚集索引结构深度理解
- 浅析SQL数据操作语句
- SQLServer 数据导入导出的几种方法小结
- 调整SQLServer2000运行中数据库结构
- 简述MySQL分片中快速数据迁移
- MySQL数据备份之mysqldump的使用详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一