本文共 4334 字,大约阅读时间需要 14 分钟。
特点
D=(数据结构中元素所占存储空间)/(整个数据所占的空间)
不足
对表的插入和删除运算时间复杂度叫差。
顺序存储的文件架构
order.h头文件内容
#ifndef __SEQLIST_H__ #define __SEQLIST_H__
#define MAXSIZE 100 typedef int data_t; typedef struct { data_t data[MAXSIZE]; int last; }seqlist_t;
seqlist_t *create_seqlsit(void); //创建线性表 void clear_seqlsit(seqlist_t *L); //clear数据
int is_empty_seqlist(seqlist_t *L); //是否为空 int is_full_seqlist(seqlist_t *L); //是否为满 void set_empty_seqlist(seqlist_t *L); //分配空间 int get_length_seqlist(seqlist_t *L); //开始的长度 void show_seqlist(seqlist_t *L); //读取元素
int insert_seqlist(seqlist_t *L,data_t x,int pos); //插入线性表内容 int delete_seqlist(seqlist_t *L,int pos); //删除线性表内容 int change_seqlist(seqlist_t *L,data_t x,int pos); //变更线性表内容 int search_seqlist(seqlist_t *L,data_t x); //查线性表内容
#endif |
order.c 源文件内容
#include <stdio.h> #include <stdlib.h> #include "order.h"
seqlist_t *create_seqlsit(void){ seqlist_t *L = NULL; L = (seqlist_t *)malloc(sizeof(seqlist_t)); //分配线性空间 if(L == NULL){ printf("no memory\n"); return NULL; }else{ L->last=-1; return L; } }
void clear_seqlsit(seqlist_t *L){ if(L == NULL){ printf("is clear null\n"); return; }else{ free(L); return; } }
int is_empty_seqlist(seqlist_t *L){ if(L == NULL){ printf("is null\n"); return -1; } return (L->last == -1); } int is_full_seqlist(seqlist_t *L){
//Judging whether there is room
if(L ==NULL){ printf("is null\n"); return -1; }else{ return (L->last == MAXSIZE-1); }
} void set_empty_seqlist(seqlist_t *L){ if(L == NULL){ printf("is null\n"); return; } L->last = -1; return; } int get_length_seqlist(seqlist_t *L){ if(L == NULL){ printf("is null\n"); return -1; } return(L->last+1); } void show_seqlist(seqlist_t *L){ int elements; if(L == NULL){ printf("is null\n"); return; } for(elements=0;elements<=L->last;elements++){ printf("L->data[%d]=%d\n",elements,L->data[elements]); } return; }
int insert_seqlist(seqlist_t *L,data_t x,int pos) { int elements; if((is_full_seqlist(L))||(pos<0)||(pos>L->last+1)){ printf("input argv is invalid\n"); return -1; } for(elements=L->last;elements>=pos;elements--){ L->data[elements+1]=L->data[elements]; } L->data[pos]=x; L->last++; return 0; } int delete_seqlist(seqlist_t *L,int pos){ int elements =0; if((pos<0)||(pos>L->last)){ printf("is invalid\n"); return -1; } for(elements=pos;elements<get_length_seqlist(L);elements++){ L->data[elements] = L->data[elements+1]; } L->last--; return 0;
}
int change_seqlist(seqlist_t *L,data_t x,int pos){
if((pos<0)||(pos>L->last)){ printf("is invalid\n"); return -1; }else{ L->data[pos] = x; return 0; } } int search_seqlist(seqlist_t *L,data_t x){ int elements=0; for(elements=0;elements<=L->last;elements++){ if(L->data[elements] == x){ return elements; } } return -1; } |
test.c 源文件内容
#include <stdio.h> #include <stdlib.h> #include "order.h"
int main(int argc,char * argv[]){
int elements=0; seqlist_t *L=NULL; L = create_seqlsit(); for(elements=0;elements<=4;elements++){ insert_seqlist(L,elements,0); } printf("seqlist L length is %d\n",get_length_seqlist(L)); show_seqlist(L); printf("+++++++++++++++++++++++++++++\n"); printf("search data = 3\n"); printf("data = 3 pos is %d\n",search_seqlist(L,3)); printf("seqlist L length is %d\n",get_length_seqlist(L)); show_seqlist(L); printf("+++++++++++++++++++++++++++++\n"); printf("delete data = 3\n"); delete_seqlist(L,search_seqlist(L,3)); printf("seqlist L length is %d\n",get_length_seqlist(L)); show_seqlist(L); printf("+++++++++++++++++++++++++++++\n"); printf("change data[2]= 99\n"); change_seqlist(L,99,2); printf("seqlist L length is %d\n",get_length_seqlist(L)); show_seqlist(L); printf("+++++++++++++++++++++++++++++\n"); clear_seqlsit(L);
return 0; } |
makefile文件编写
CC = gcc CFLAGS = -O0 -g -Wall test:test.c order.c $(CC) $(CFLAGS) -o $@ $^ .PHONY:clean clean: rm -rf test |
2.输出结果
seqlist L length is 5 L->data[0]=4 L->data[1]=3 L->data[2]=2 L->data[3]=1 L->data[4]=0 +++++++++++++++++++++++++++++ search data = 3 data = 3 pos is 1 seqlist L length is 5 L->data[0]=4 L->data[1]=3 L->data[2]=2 L->data[3]=1 L->data[4]=0 +++++++++++++++++++++++++++++ delete data = 3 seqlist L length is 4 L->data[0]=4 L->data[1]=2 L->data[2]=1 L->data[3]=0 +++++++++++++++++++++++++++++ change data[2]= 99 seqlist L length is 4 L->data[0]=4 L->data[1]=2 L->data[2]=99 L->data[3]=0 +++++++++++++++++++++++++++++ |
转载地址:http://lcuti.baihongyu.com/