数据结构C++实现线性表之顺序表

在复习数据结构的过程中,对线性表中顺序表的理解认为不够深入,所以选择使用代码来加深印象,我选择的是C++来实现顺序表。(注:本代码中未使用malloc来申请新的空间)

 

#include<iostream>
#include<algorithm>
#include<stdio.h> 

using namespace std;
#define MaxSize 10

//顺序表的建立 
typedef struct {
	int data[MaxSize];					// 	存储空间的基地址
	int length;							//当前长度 
}SqList;

//顺序表的初始化
void initList(SqList &L) {//引用结构体  SqList
	for (int i = 0; i < L.length; i++)
		L.data[i] = 0;
	L.length = 0;
	cout << "顺序表初始化完成" << endl;
	cout << "===============================" << endl;
}
// 顺序表传值
void createList(SqList &L,int n) {
	cout << "请传入数值" << endl;
	for (int i = 0; i < n; i++) {
		cin >> L.data[i];
		L.length++;
	}
	
}
//打印顺序表 
void printList(SqList L) {
	if (L.length == 0) return;
	cout << "=====================" << endl;
	for (int i = 0; i < L.length; i++) {
		cout << "第"<<i<<"个元素的值是"<<L.data[i]<<"    =" << endl;
	}
	cout << "=====================" << endl;
}
//按值查找元素
int getElemvalue(SqList L,int n) {
	int count = 0;
	for (int i = 0; i < L.length; i++) {
		if (n == L.data[i]) {
			count++;
			cout << "该元素存在且该元素在第" <<i<<"位"<< endl;

		}
	}
	if (count == 0) {
		cout << "该元素不存在" << endl;
		return 0;
	}
	cout << "===============================" << endl;
}
//按位查找元素
int getElemindex(SqList L,int i) {
	if (i<1 || i>=L.length) {
		cout << "该顺序表中不存在这种元素" << endl;
		return 0;
	}
	else {
		cout << "第"<<i<<"位的值为"<<L.data[i] << endl;
		return i;
	}
	cout << "===============================" << endl;
}
//在表中插入数据
int insertElem(SqList &L) {
	int i, e;
	cout << "请输入要插入的位置" << endl;
	cin >> i;
	if (i<0 || i>(L.length + 1)) {
		cout << "输入的地址不合法" << endl;
		return 0;
	}
	cout << "请输入要插入的值" << endl;
	cin >> e;
	 if(L.length<MaxSize){
	
		for (int j = L.length; j > i; j--) {
			L.data[j + 1] = L.data[j];
		}
		L.data[i] = e;
		L.length++;
		printList(L);	
		cout << "插入成功" << endl;
		return i;
	}
	cout << "===============================" << endl;
}
//删除元素
int deleteElem(SqList& L) {
	int l;
	cout << "请输入要删除元素值的位置" << endl;
	cin >> l;
	if (l<0 ||l > L.length) {
		cout << "不存在这种元素" << endl;
		return 0;
	}
	else{
		for (int i = l; l < L.length; l++) {
			L.data[i] = L.data[i + 1];
		}
		L.length --;
		cout << "删除成功" << endl;
		printList(L);
	}

}
int main() {
	SqList list;
	cout << "请输入数组的长度" << endl;
	int n;
	cin >> n;
	
	initList(list);//初始化list
	
	createList(list,n);//list传值
	
	
	printList(list);//打印list
	int value,index;
	cout << "请输入要查找的元素的值" << endl;
	cin >> value;
	getElemvalue(list, value);
	cout << "请输入要查找的元素的索引" << endl;
	cin >> index;
	getElemindex(list,index);

	insertElem(list);//在表中插入元素
	

	deleteElem(list);//在表中删除元素

}

运行结构示意截图:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值