读书人

线性表之顺序存储构造-C实现

发布时间: 2013-02-25 10:23:36 作者: rapoo

线性表之顺序存储结构--C实现
说在前面

数据结构和算法是程序设计的灵魂。坦诚的说,我在这方面是弱的可以。虽然工作这么多年了,因为种种借口,这块知识一直是我的痛处。

曾经在面试时大言不惭的说,这些知识在工作中很少用到,所以当年学习的东西早就还给学校了。其实不然,失去了灵魂的程序员如我,总是要逆袭的。

所以以后的学习中会有一些如孩童笔记般的文章出现在我的blog中,请大师们不要嘲笑,要提携。

定义

线性表可以说是最简单的数据结构,它的描述为:n个数据元素的有限序列

记为:L=(a1,a2,...,an)

按照存储结构它又可以分为顺序存储结构和链式存储结构。

而其中线性表的顺序存储结构是最简单最常用的数据结构:用一段连续地址依次存储表中的数据元素

看到这里,我们会自然的联想到C语言中的数组。

下面我要实现的是线性表中的元素为整型的顺序存储结构,及它的主要运算:增删查。

先来简单的定义一下这个线性表的顺序存储结构:

//2013.2//lincoln//linear list//Sequence Storage Structure //#include <stdio.h>#define OK 1#define ERROR -1#define TURE 1#define FALSE 0#define MAXLENGTH 20struct sequencelist{int data[MAXLENGTH];int length;};//get list elements//make sure elemet is NOT NULL when calling.int getElement(struct sequencelist list,int index,int *element){printf("\ngetElement\n");int length = list.length;printf("length is %d\n",length);if(length ==0 || index < 0 || index >= length)return ERROR;*element = list.data[index];return OK;}//insert opration//int insert(struct sequencelist *list,int index,int element){printf("\ninsert\n");int length = list->length;printf("length is %d\n",length);if(length ==0 || index < 0 || index > length || length >= MAXLENGTH)return ERROR;list->data[index] = element;for(int i = length - 1;i>index;i--){list->data[i+1] = list->data[i];}list->length++;return OK;}// Delete opration//int delete(struct sequencelist *list,int index){printf("\ndelete\n");int length = list->length;printf("length is %d\n",length);if(length ==0 || index < 0 || index > length-1 )return ERROR;for(int i = index;i<length-1;i++){printf("delete data[%d]\n",i);list->data[i] = list->data[i+1];}list->data[length-1] = '\0';//delete the last element.list->length--;return OK;}int main(){struct sequencelist list = {{3,1,5,7,12,78,34},7};printf("list length  : %d\n",list.length);//Test getint *element = 0, test = 8;element = &test;if(OK == getElement(list,2,element)){printf("list get 2 :%d\n", *element);}//Test insertif(OK == insert(&list,7,520)){printf("list insert 7 ok!\n");}if(OK == getElement(list,7,element)){printf("list get 7 :%d\n", *element);}if(OK == insert(&list,3,520)){printf("list insert 3 ok!\n");}if(OK == getElement(list,3,element)){printf("list get 3 :%d\n", *element);}//Test deleteif(OK == delete(&list,3)){printf("list delete 3 ok!\n");}if(OK == getElement(list,3,element)){printf("list get 3 :%d\n", *element);}if(OK == delete(&list,6)){printf("list delete 6 ok!\n");}if(OK == getElement(list,6,element)){printf("list get 6 :%d\n", *element);}else{printf("list get ERROR!\n");}}




读书人网 >编程

热点推荐