线性表的顺序表示和实现

线性结构的特点

1.存在唯一的一个被称做“第一个”的数据元素。
2.存在唯一的一个被称做“最后一个”的数据元素。
3.除第一个之外,集合中每一个数据元素只有一个前驱。
4.除最后一个之外,集合中的每个数据元素只有一个后继。


线性表顺序表示功能实现代码

实现功能分别为:尾插数据,头插数据,显示数据,尾删,头插,按位置插入,查找数据,删除数据,清除数据表,销毁数据表

#include <stdio.h>
#include <malloc.h>
#include <assert.h>	
#define SEQLIST_INIT_SIZE 5 //线性表存储空间的初始分配量 
typedef int ElemType;
typedef struct{
	ElemType *base;			//指向ElemType类型数组指针 
	int listSize;			//数组最大容量 
	int length;				//数组长度	
}SeqList;
/*创建顺序表*/
void InitSeqList(SeqList *list){
	list->base = (ElemType *)malloc(sizeof(ElemType)*SEQLIST_INIT_SIZE);
	assert(list->base !=NULL);
	list->listSize = SEQLIST_INIT_SIZE;
	list->length = 0;
}
/*尾插法将数据插入*/
void push_back(SeqList *list,ElemType x){
	if(list->listSize==list->length){
		printf("顺序表已满,不能尾插!\n");
		return; 
	}
	list->base[list->length] = x;
	list->length++;
}
/*头插法将数据插入*/
void push_front(SeqList *list,ElemType x){
	if(list->listSize==list->length){
		printf("顺序表已满,不能头插!\n");
		return; 
	}
	for(int i=list->length;i>0;i--){
		list->base[i] = list->base[i-1];
	}
	list->base[0] = x;
	list->length++;/*每次头插后都向后移动一个位置,
					保证0位置可以插入数据*/
}
/*显示顺序表数据*/
void show_list(SeqList *list){
	for(int i=0;i<list->length;i++)
	printf("%d ",list->base[i]);
	printf("\n");
}
/*尾删*/
void pop_back(SeqList *list){
	if(list->length==0)
		printf("顺序表为空,不能尾删!");
	list->length--;
}
/*头删*/
void pop_front(SeqList *list){
	if(list->length==0)
		printf("顺序表为空,不能头删!");
	for(int i=0;i<list->length-1;i++){
		list->base[i]=list->base[i+1];
	}
	list->length--;
}
/*按位置插入*/
void insert_pos(SeqList *list,int pos,ElemType x){
	if(pos<0||pos>list->length)
		printf("插入位置非法!\n");
		return;
	for(int i=list->length;i>pos;i--){
		list->base[i]=list->base[i-1];
	}
	list->base[pos]=x;
	list->length++;
}
/*查找数据*/
int find(SeqList *list,ElemType key){
	for(int i=0;i<list->length;i++){
		if(list->base[i]==key)
		return i;
	}
	return -1;
}
/*按数据删除*/
void delete_value(SeqList *list,ElemType key){
	int pos = find(list,key);
	if(pos == -1){
		printf("要删除的数据不存在.\n");
		return;
	}
	for(int i=pos;i<list->length-1;i++){
		list->base[i] = list->base[i+1];
	}
	list->length--;
}
/*清除数据表*/
void clear(SeqList *list){
	list->length = 0;
} 
/*销毁数据表*/ 
void destroy(SeqList *list){
	free(list->base);
	list->base = NULL;
	list->length = 0;
	list->listSize = 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值