博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++实战数据结构与算法-第5节实战顺序存储
阅读量:4144 次
发布时间:2019-05-25

本文共 4334 字,大约阅读时间需要 14 分钟。

特点

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

 

转载地址:http://lcuti.baihongyu.com/

你可能感兴趣的文章
网易秋招内推——等差数列
查看>>
最长递增子序列
查看>>
阿里内推编程测验---靶场射击,类似[LeetCode]Burst Balloons
查看>>
java抽象类和接口
查看>>
有趣的排序——百度2017春招
查看>>
二叉树的最近公共祖先LCA
查看>>
数组中累加和为定值K的最长子数组长度
查看>>
和为S的连续正数序列
查看>>
素数对--腾讯2017校招编程
查看>>
JAVA集合--ArrayList实现原理
查看>>
值传递与引用传递
查看>>
java 多态
查看>>
Java虚拟机的体系结构和内存模型
查看>>
深入理解Java HashMap(JDK1.8)
查看>>
HashMap、Hashtable与ConcurrentHashMap
查看>>
synchronized与Lock
查看>>
数据库索引
查看>>
实现包含min,max,push,pop函数的栈
查看>>
计算两个日期之间相差多少天,计算当前日期是星期几
查看>>
机器学习初学者——常见算法篇
查看>>