C++实战数据结构与算法-第5节实战顺序存储

特点

  1. 逻辑上相邻的元素ai,ai+1,其存储位置也是相邻的。
  2. 对数据元素ai的存储为随机存取或按地址存取。
  3. 存储密度高。存储密度

D=(数据结构中元素所占存储空间)/(整个数据所占的空间)

不足

      对表的插入和删除运算时间复杂度叫差。

  1. 顺序存储实现

顺序存储的文件架构

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
+++++++++++++++++++++++++++++

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随行之旅

python国产化自动化

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值