线性表实例
来源:互联网 发布:linux导出mysql数据表 编辑:程序博客网 时间:2024/06/11 16:16
线性表的本质:
由0个或多个数据元素组成的集合数据元素之间是顺序的数据元素个数是有限的数据元素的类型必须是相同的
专业的定义:
线性表是具有相同类型的n(n>=0)个数据元素的有限序列(a0,a1,a2,...an)ai是表项,n是长度
性质:
a0为线性表中的第一个元素,只有一个后继an为线性表中的最后一个元素,只有一个前驱除了a0和an之外的其他元素ai,既有一个直接前驱,也有一个直接后继线性表能够逐项访问和顺序存取
线性表的操作
创建销毁 //销毁这个序列,清空 //有这个序列,但都被清空删除插入获取表中某个位置的数据元素获得线性表的长度
线性表的顺序存储结构
线性表的顺序结构指的是用一段地址连续的存储单元依次存储线性表的数据元素
优缺点
优点:可以快速的获得表中的数据缺点:增加和删除的时候会有大量的节点移动
实例如下:
//seqlist.h文件#ifndef __SEQLIST_H__#define __SEQLIST_H__typedef unsigned int SeqListNode;typedef struct _list{ int capacity; //最大容量 int length; //当前元素个数 SeqListNode *node; //起始地址}SeqList;SeqList *SeqList_Create(int capacity);void SeqList_Destroy(SeqList *list);void SeqList_Clear(SeqList *list);int SeqList_Length(SeqList *list);int SeqList_Capacity(SeqList *list);int SeqList_Insert(SeqList *list,SeqListNode *node,int pos);SeqListNode *SeqList_Get(SeqList *list,int pos);SeqListNode *SeqList_Delete(SeqList *list,int pos);#endif //__SEQLIST_H__
//seqlist.c文件#include <stdlib.h>#include "seqlist.h"SeqList *SeqList_Create(int capacity){ SeqList *ret = NULL; if(capacity >= 0) { ret = malloc(sizeof(SeqList) + sizeof(SeqListNode)*capacity); } if(ret != NULL) { ret->capacity = capacity; ret->length = 0; ret->node = (SeqListNode *)(ret+1); } return ret;}void SeqList_Destroy(SeqList *list){ free(list);}void SeqList_Clear(SeqList *list){ if(list != NULL) list->length = 0; //当前元素个数}int SeqList_Length(SeqList *list){ int ret = -1; if(list != NULL) { ret = list->length; } return ret;}int SeqList_Capacity(SeqList *list){ int ret = -1; if( list != NULL ) ret = list->capacity; return ret;}int SeqList_Insert(SeqList *list,SeqListNode *node,int pos){ int i; int ret = (list!=NULL) && (node!=NULL); ret = ret && (pos>=0) && (list->length+1<=list->capacity); if( ret ) { if( pos > list->length ) pos = list->length; for( i=list->length;i>pos;i-- ) { list->node[i] = list->node[i-1]; } list->node[i] = (unsigned int)node; //这里只能是i,不能是pos,也不能是length,这里是指针强转换为int型,经常这样做, list->length++; } return ret;}SeqListNode *SeqList_Get(SeqList *list,int pos){ SeqListNode *ret = NULL; if( list!=NULL && (0<=pos && pos<list->length) ) { ret = (SeqListNode *)(list->node[pos]); } return ret;}SeqListNode *SeqList_Delete(SeqList *list,int pos){ int i; SeqListNode *ret = SeqList_Get(list,pos); if( ret!=NULL ) { for(i=pos+1; i<=list->length; i++) { list->node[i-1] = list->node[i]; } list->length--; } return ret;}
//main.c#include <stdio.h>#include <stdlib.h>#include "seqlist.h"int main( void ){ int i; int j; int a[10] = {}; SeqList *list = SeqList_Create(10); printf("Capacit = %d\n",SeqList_Capacity(list)); printf("length = %d\n",SeqList_Length(list)); for(i=0;i<10;i++) { a[i] = i+1; SeqList_Insert(list, a+i, 0); for(j=0; j<SeqList_Length(list); j++) { printf("%d ",*SeqList_Get(list,j)); } printf("\n"); } while (SeqList_Length(list) > 0) { int *ret = (int *)SeqList_Delete(list,0); printf("d %d\n",*ret); } SeqList_Destroy(list); return 0;}
//Makefile
.PHONY : main cleanCC=gcc -g main:main.o seqlist.o $(CC) $^ -o $@ clean: rm -rf *.o main
0 0
- 线性表实例
- C++数据结构线性表实例
- 001.线性表顺序存储C实例
- OpenCV线性滤波实例
- 线性回归 算法 实例
- 线性回归模型实例
- 一元线性回归实例
- 1.3线性回归之线性回归实例
- 线性表插入和删除——程序实例
- 线性表综合实例之学生信息管理系统
- 004.双链循环线性表C实例
- 线性表--线性存储
- 线性表 线性结构
- 二、tensorflow线性拟合实例。
- 线性表
- 线性表
- 线性表
- 线性表
- angularjs源码阅读——injector
- 简单理解Socket
- 最短路模板总结(不定时更新)
- 项目构架知识介绍
- 【DB.MySQL】Mac如何安装MySQL
- 线性表实例
- 电话激活windows
- objective C程序 封装、继承及多态
- 【剑指Offer面试题】 九度OJ1369:字符串的排列
- VC++游戏开发基础系列从入门到精通
- 欢迎使用CSDN-markdown编辑器
- 写给部分新入坑做移动端测试(Android)的同学
- hdu 1241 Oil Deposits
- Javascript-基础知识(6)