2.【顺序表】线性表的顺序存储:动态分配代码以及常用函数定义(可直接运行)

【顺序表】线性表的顺序存储:动态分配代码以及常用函数定义(可直接运行)

运行软件

C-free5.0 或者 VS C++ 2010学习版

代码展示

SqList_dynamicfull.cpp
运行环境建议C++环境

#include <stdio.h>
#include <stdlib.h>
#define Initsize 10

//建立顺序表的动态分配数据类型
typedef struct{
	int *data;
	int maxsize;
	int length;
}SeqList;

//初始化函数
void InitList(SeqList &L){
	L.data=(int *)malloc(Initsize*sizeof(int));
	L.length=0;
	L.maxsize=Initsize;
}

//顺序表容量扩充函数
void Increasesize(SeqList &L,int len){
	int *p=L.data;
	L.data=(int *)malloc((Initsize+len)*sizeof(int));
	for(int i=0;i<L.length;i++){
		L.data[i]=p[i];
	}
	L.maxsize+=len;
	free(p);
}

//插入函数,将值e插到i位置
bool ListInsert(SeqList &L,int i,int e){
	if(i<1||i>L.length+1)
		return false;
	if(L.length>=L.maxsize)
		return false;
	for(int j=L.length;j>=i;j--){
		L.data[j]=L.data[j-1];
	}
	L.data[i-1]=e;
	L.length++;
	return true;
}

//删除函数,将删除的元素返回给e
bool ListDelete(SeqList &L,int i,int &e){
	if(i<1||i>L.length)
		return false;
	e=L.data[i-1];
	for(int j=i;j<L.length;j++){
		L.data[j-1]=L.data[j];
	}
	L.length--;
	return true;
}

//按位查找函数
void GetElem(SeqList L,int i,int &e){
	e=L.data[i-1];
}

//按值查找函数
int LocationList(SeqList L,int e){
	for(int i=0;i<L.length;i++){
		if(L.data[i]==e)
			return i+1;
	}
	return 0;
}

//形式上的visit()访问函数,功能类似于访问(打印)给定值
bool visit(SeqList L){
	if(L.length<=L.maxsize)
	   return true;
}

//访问表中的所有元素的函数
bool ListTraverse(SeqList L){
		if(!visit(L))
		    return false;
	return true;
}

//打印顺序表函数
bool PrintList(SeqList L){
	for(int i=0;i<L.length;i++){
		printf("data[%d]=%d ",i,L.data[i]);
	}
	return true;
}

//填表函数,元素个数自定,不得超过初始最大容量
bool GiveElem(SeqList &L,int count){
	if(count>L.maxsize)
		return false;
	for(int i=0;i<count;i++){
		L.data[i]=25*i;
		L.length++;
	}
	return true;
}

//求表长函数
int ListLength(SeqList L){
	return L.length;
}

//主函数测试
int main(){
	SeqList L;
	int e;
	printf("This is a Dynamic sequential List.\n");
	InitList(L);
	Increasesize(L,2);
	GiveElem(L,12);
	ListDelete(L,6,e);
	ListInsert(L,3,666);
	printf("You deleted the element:e=%d\n",e);
	PrintList(L);
	printf("\n");
	GetElem(L,6,e);
	printf("NO.6 element:e=%d\n",e);
	int a=LocationList(L,666);
	int b=ListLength(L);
	int c=ListTraverse(L);
	printf("%d\n%d\n%d\n",a,b,c);

	return 0;
}

运行结果

This is a Dynamic sequential List.
You deleted the element:e=125
data[0]=0 data[1]=25 data[2]=666 data[3]=50 data[4]=75 data[5]=100 data[6]=150 data[7]=175 data[8]=200 data[9]=225 data[10]=250 data[11]=275
NO.6 element:e=100
3
12
1
请按任意键继续. . .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值