数据结构的线性关系

数据结构的线性关系

线性关系:里面的每一个元素都是平等的,每个节点至多有一个前驱和一个后继。头部没有前驱,尾部没有后继。其结构类似于一维数组的结构。
如下图所示:
顺序存储结构

顺序存储结构

删除操作:对某一元素进行删除,其后面的元素都要往前移动一个单位。浪费CPU资源
插入操作:对数组中某一单元进行插入,后面的元素都要往后移动一个单位。操作麻烦。
缺点:一次空间分配,大小恒定,如果空间不够,无解;如果没有用完分配的空间,造成空间浪费。

一个顺序存储结构的程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct seq_line{//定义一个结构体(数据包),用于存放数据和数据指针
   int data[16];
	int index;	//指向最后一个数
};
struct seq_line * seq_line_create(void)//
{
	struct seq_line *line = malloc(sizeof(*line));//开辟一个栈空间
	memset(line,0,sizeof(*line));//把line指向的空间置零
	line->index = -1;
	return line;
}
int seq_line_init(struct seq_line *seq)//为开辟出的空间初始化赋值
{
	int i;
	for(i=0;i< 12;i++){
		seq->index++;
		seq->data[ seq->index ] = i;
	}
	return 0;
}
int seq_line_is_empty(struct seq_line *seq)//检查空间是否为空
{
	return  seq->index == -1 ? 1 : 0;
}
int seq_line_is_full(struct seq_line *seq)//检查内存是否存满
{
	return seq->index == 15 ? 1:0;
}
int seq_line_insert(struct seq_line *seq,int pos,int data)
{//在内存中插入新的数据
	int i;
	if(pos > seq->index){
		printf("pos > index, valid ops\n");
		return -11;
	}
	if(seq_line_is_full(seq)){
		printf("%s %d seq is full\n",__func__,__LINE__);
		return -12;
	}
	for(i=seq->index; i>=pos;i--){
		seq->data[i+1] = seq->data[i];
	}
	seq->data[pos] = data;
	seq->index++;
}
int seq_line_delete(struct seq_line *seq,int pos)
{//删除指定位置的数据
	int i;
	if(pos <0 || pos > seq->index ){
		printf("%s %d valid pos %d\n",__func__,__LINE__,pos);
		return -14;
	}
	for(i=pos;i <= seq->index -1; i++){
		seq->data[i] = seq->data[i+1];
	}
	seq->index--;
	return 0;
}
int seq_line_cnt(struct seq_line *seq)
{//统计数据的个数
	return seq->index+1;
}
int seq_line_travel(struct seq_line *seq)
{//扫描打印输出数据
	int i;
	for(i=0;i<= seq->index;i++){
		printf("%3d  ",seq->data[i]);
	}
	printf("\n");
	return 0;
}
int seq_line_find(struct seq_line *seq ,int data)
{//查找数据
	int i;
	for(i=0;I <= seq->index;i++){
		if(seq->data[]==data)
			printf(%d是第%d个数”,data,i);
	}
}
struct seq_line *seq;//定义一个结构体指针
void main(void)
{
	seq = seq_line_create();
	seq_line_init(seq);
	seq_line_travel(seq);
	printf("insert pos5 val 100\n");
	seq_line_insert(seq,5,100);
	seq_line_travel(seq);
	printf("delete pos5\n");
	seq_line_delete(seq,5);
	seq_line_travel(seq);
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值