第一期 C/C ++ 线性表 顺序表

#include <iostream>
using namespace std;
#define maxsize 100

typedef struct {
	char elem[maxsize];
	int length;
}sqlist;		//定义顺序表
	
	void initlist(sqlist& l) {			//初始化方法
			l.length = 0;
	}
	void insertlist(sqlist& l, int n) {	//初始赋值
		cout << "请输入"<<n<<"位字符:" << endl;
		char x;
		for (int i = 0; i < n; i++) {	//利用循环遍历顺序表的1-n个元素
			cin >> x;
			l.elem[i] = x;
			l.length++;
		}
		cout << "导入成功~~~~~" << endl;
	}
	void printlist(sqlist l) {			//将顺序表l.length个元素利用循环将l.elem[i]进行遍历且输出。
		cout << ",目前顺序表内容为:";
		int i = 0;
		while (i < l.length) {
			cout << l.elem[i] << " ";
			++i;
		}
	}
	void listempty(sqlist l) {		//断顺序表的长度是否为0,若不为0则为空,否则不为空。
		if (l.length==0){
			cout << "您的顺序表是空的" << endl;
		}
		cout << "您的顺序表不是空的" ;
	}
	void listlength(sqlist l) {     //直接返回l.length顺序表的长度。
		cout<<",长度为:" << l.length;
		
	}
	void  listinsert(sqlist& l, int i, char e) { //插入操作
		if (i<1 || i>l.length) cout << "对不起,您要插入的位置不对!" << endl;//判断长度i是否合法
		if (l.length == maxsize) cout << "对不起,您的空间不足啦!" << endl;//判断存储空间是否满足
		for (int j = l.length; j >=i-1 ; j--){
			l.elem[j + 1] = l.elem[j];   //将前一个元素往后一个元素赋值
		}
		l.elem[i - 1] = e;
		++l.length;
		cout << "插入成功~~~~~" << endl;
	}
	void getlist(sqlist& l, int i) {
		if (i<1||i>l.length){    //判断长度i是否合法
			cout << "对不起,您输入的位置不对!" << endl;
		}else{
			char e = l.elem[i - 1];
			cout <<"取值成功~~~~~你取的第"<<i<<"位置的值是" << e << endl;
		}
	}
	void locationlist(sqlist l,char e) {  //定位元素位置
		for (int i = 0; i < l.length; i++){
			if (l.elem[i]==e) {
				cout << "您要查找的"<<e<<"元素下表为:"<<i+1 << endl;  //返回其位置
			}
		}
	}
	void deletelist(sqlist &l,int i) {
		if (i<1||i>l.length)cout << "第" << i << "位置没有字符哦~" << endl;//判断长度i是否合法
		for (int j=i; j <= l.length-1; j++) {
			l.elem[j-1] = l.elem[j];      //将后一个元素往前一个元素赋值
		}
		--l.length;
		cout << "删除成功";
	}
	void Clearlist(sqlist &l) {
		if (l.elem){
			/*delete &l;//释放内存*/
			l.length = 0;
			cout << endl<<"顺序表已置空~";
		}	
	}

	int main() {
		sqlist l;
		initlist(l);
		
		cout << "第一项:字符导入。请输入要导入的字符个数:" << endl;
		int n; cin >> n;  
		insertlist(l, n);  //插入字符 a,b,c,d,e

		listempty(l);	//判断是否为空

		listlength(l);  //输出顺序表的长度

		printlist(l);   //输出顺序表

		cout <<endl<< "第二项:插入操作。"<<endl;
		cout<<"1.你想在第几个位置添加字符呢:" << endl;
		int a;cin >> a;
		cout <<"2.请输入你要插入的字符:" << endl;
		char b; cin >> b;
		listinsert(l, a, b);  //插入字符操作

		cout << "第三项:取值操作。你想取第几个位置的字符呢:" << endl;
		int c; 
		cin >> c;
		getlist(l,c);        //获取第i个字符 

		cout << "第四项:查找操作,你想查找什么元素呢?" << endl;
		char d;  cin >>d;
		locationlist(l, d);	//获取输入的元素位置

		cout << "第五项:删除操作,你想删除第几个元素?" << endl;
		int e;  cin >> e;
		deletelist(l,e);	//删除你要删除第i个元素

		listlength(l);  //输出顺序表的长度

		printlist(l);	//输出顺序表

		Clearlist(l); //置空顺序表
	}

代码仅供参考,如有好的方法,可以放在评论区。

程序运行截图

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵相机~

谢谢你,调试、讲解私聊我~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值