C语言实现线性表之顺序表
来源:互联网 发布:知乎日报吐槽合集 编辑:程序博客网 时间:2024/06/04 08:26
线性表的抽象数据类型
ADT 线性表(LIST)DATA线性表的数据集合为{a1,...an},每个元素类型均为DataType,其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素外,每个元素都有一个直接后继元素。数据元素之间的关系是一对一的关系。OPERATION InitList(*L);/*初始化操作,建立一个空的线性表L*/ ListEmpty(L);/*若线性表为空,返回true*/ ClearList(*L);/*将线性表清空*/ GetElem(L,i,e);/*将线性表L中第i的位置返回给e*/ LocateElem(L,e);/*在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素表中的序号,否则,返回0失败*/ ListInsert(*L,i,e);/*在线性表L中的第i个位置插入新元素e*/ ListDelete(*L,i,*e);/*删除线性表L中第i个元素,并用e返回其值*/ ListLength(L);/*返回线性表L的元素个数*/ENDADT
线性表的顺序存储结构
定义
- 线性表的顺序结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素
特点
- 结点中只有自身的信息域,没有关联信息域。因此,顺序存储结构的存储密度大、存储空间利用率高。
- 通过计算地址直接访问任何数据元素,即可以随机访问。
- 插入和删除操作会引起大量元素的移动。
顺序表的头文件定义
#ifndef Seq_LIST_H#define Seq_List_Hextern Status;# define MAXSIZE 20 /*STORAGE INITIAL SIZE*/ typedef int ElemType;/*Depend on your solution*/ typedef struct SQ { ElemType data[MAXSIZE];/*data array,maxsize is MAXSIZE.*/ int length;/*SeqList current length.*/ }SqList; /*declaration*/ void InitList(SqList *); bool ListEmpty(SqList);/*assert the structure is empty*/ bool ClearList(SqList *);/*clear the List*/ Status GetElem(SqList,int,ElemType *); int LocateElem(SqList,int); bool ListInsert(SqList *,int,ElemType); Status ListDelete(SqList *,int,ElemType *); int ListLength(SqList);#endif
顺序表的函数实现
#include <stdio.h>#include <stdlib.h>#include "SeqList.h"#define ERROR 0#define OK 1typedef int Status;/*implement the declaration*/void InitList (SqList *sqlist){ sqlist->data[0]=NULL; sqlist->length=0;}bool ListEmpty(SqList sqlist){ return sqlist.length==0?true:false;}Status ClearList(SqList &sqlist){ return ((&sqlist)->length=0)&&((&sqlist)->data[0]=NULL) ? OK:ERROR;}/*take the index i value into e in sqlist*/Status GetElem(SqList sqlist,int i,ElemType *e){ if(sqlist.length==0||i<1||i>sqlist.length) return ERROR; *e=sqlist.data[i-1]; return OK;}int LocateElem(SqList sqlist,int e){ int index; if(sqlist.data[0]==NULL||sqlist.length==0) { return 0; } else { for(index=0;index<sqlist.length-1;index++) { if(sqlist.data[index]==e) { break; } else { return 0; } } return index+1; }}bool ListInsert(SqList *sqlist,int i,ElemType e){ int k; if(sqlist->length==MAXSIZE) { return false; } if(i<1||i>sqlist->length+1) { return false; } if(i<=sqlist->length) { for(k=sqlist->length-1;k>i-1;k++) { sqlist->data[k+1]=sqlist->data[k]; } } sqlist->data[i-1]=e; sqlist->length++; return true;}Status ListDelete(SqList *sqlist,int i,ElemType *e){ int k; if(sqlist->length==0) return ERROR; if(i<1||i>sqlist->length+1) return ERROR; *e=sqlist->data[i-1]; if(i<sqlist->length) { for(k=i;k<sqlist->length;k++) { sqlist->data[k-1]=sqlist->data[k]; } } sqlist->length--; return OK;}int ListLength(SqList sqlist){ return sqlist.length;}
代码是基于c语言对数据结构进行阐述。代码逻辑不难,有什么看不透的欢迎留言,指正,交流。
阅读全文
0 0
- 数据结构之---c语言实现线性表的顺序表
- 线性表之顺序表(C语言实现)
- C语言实现线性表之顺序表
- 数据结构c语言实现之顺序线性表
- C语言实现线性表之顺序存储结构操作
- 线性表的顺序实现(C语言)
- 线性表的顺序实现(c语言)
- 线性表顺序实现(C语言)
- C语言实现线性顺序链表
- C语言线性表之顺序表
- 线性结构之顺序表------C实现
- 线性链表--顺序链表实现(c语言)
- 数据结构--线性表.顺序表(C语言实现)
- 线性表的顺序表示(C语言实现)
- 线性表——顺序结构(c语言实现)
- 线性表的顺序表示和实现(C语言描述)
- 线性表的顺序表示及实现(C语言编写)
- 顺序存储结构线性表的C语言实现
- STM32的GPIO内部结构及相关寄存器
- C++指向成员函数的指针
- 深入理解Commonjs规范及Node模块实现
- ACM Battle(巧妙暴力)
- Topcoder 721 div2-B RememberWordsEasy
- C语言实现线性表之顺序表
- Redis学习12——Redis持久化
- XGBoost-Python完全调参指南-参数解释篇
- C++中引用与指针的区别(详细介绍)
- 实验二(3)用循环双链表实现对数据的基本操作
- 拒绝惯性加班,拒绝透支未来
- java.lang.UnsupportedClassVersionError: org/hibernate/HibernateException : Unsupported major.minor..
- 统计字符
- lightOJ 1244 DNA Prefix (字典树)