数据结构(一)顺序表1:顺序存储的基本操作

线性表是一种最简单的线性结构。

线性表:n个类型相同的元素的有限集合。(每个数据之间存在着唯一的顺序关系)

线性表有两种存储结构:顺序存储结构和链式存储结构。


1.线性表的定义:

#include<iostream>
#include<cstdlib>
//#include<bits/stdc++.h>

using namespace std;

#define MAXSIZE 100
//const int MAXSIZE=(100);
<pre name="code" class="cpp">void Initlist(Sqlist &l);   //初始化线性表;
void Createlist(Sqlist &l); //创建线性表
bool Isempty(Sqlist l);    //判断线性表是否为空
void Insert_elem(Sqlist &l,int i,int e);   //在线性表的第i个位置插入元素es
void Delete_elem(Sqlist &l,int i,int *e);  //在线性表的第i个位置删除元素e
void Clearlist(Sqlist &l);  //清空线性表中元素
int Length(Sqlist l);       //求线性表的长度
int Getelem(Sqlist l,int i);  //求线性表第i个位置的元素
void Locatedelem(Sqlist l,int e,int *i);  //求元素e在线性表中的位置

typedef struct node{int *data;//储存空间基地址int length;//当前表长}Sqlist;

 

2.初始化线性表:

//初始化线性表
void Initlist(Sqlist &l) {
	//将线性表的表长置为0
	l.data=(int *)malloc(sizeof(int));
	if(!l.data)  exit (-2);  //储存空间分配失败
	l.length=0;    //将线性表的表长置为0
}


3.创建线性表:

//创建线性表
void Create(Sqlist &l) {
	//创建线性表
	int data;
	cin>>data;
	int i=0;
	while (data!=-1) {
		l.data[i]=data;
		cin>>data;
		i++;
	}
	l.length=i;
}

4.判断线性表是否为空:

//判断线性表是否为空
bool Isempty(Sqlist l) {
	//表长是否=0
	if(l.length==0)  return true;
    else return false;
}


5.判断线性表是否为满


//判断线性表是否为满
bool Isfull(Sqlist l) {
	//l.length>=MAXSIZE;
	if(l.length>=MAXSIZE)  return true;
	else  return true;
}



6.求线性表第i个位置的元素

//求线性表第i个位置的元素
int Getelem(Sqlist l,int i) {
	//第i个位置的元素=data[i-1]
	//判断i是否合法
	int e;
	if(i<1  ||  i>l.length)  exit(-2);
	return e=l.data[i--];
}


7.//求元素e在线性表中的位置

//求元素e在线性表中的位置
int Locatedelem(Sqlist l,int e) {
	//data[i]==e,是第i+1个位置
	for(int i=0;i<l.length;i++) {
		if(l.data[i+1]==0)
			return i;
	}
	return -1;  //没有找到
}

8.在线性表的第i个位置插入元素e

//在线性表的第i个位置插入元素e
void Insert_elem(Sqlist &l,int i,int e) {
	//data[i-1]=e,
	//从表尾到位置i的元素位置+1
	//判断i是否合法
	//判断线性表是否为满
	if(i<1  ||  i>l.length)  exit(-2);
	else if(l.length>=MAXSIZE)  exit(-2);
	else {
		l.data[i-1]=e;
		for(int j=l.length;j>=i;j--)
			l.data[j]=l.data[j-1];
		l.length++;
	}
}

9.在线性表的第i个位置删除元素e


//在线性表的第i个位置删除元素e
void Delete_elem(Sqlist &l,int i,int e) {
	//data[i-1]=e,
	//从位置i到表尾的元素位置-1
	//判断i是否合法
	//判断线性表是否为空
	if(i<1  ||  i>l.length)  exit(-2);
	else if(l.length==0)  exit(-2);
	else {
		e=l.data[i-1];
		for(int j=i;j<=l.length;j++)
			l.data[j-1]=l.data[j];
		l.length--;
	}
}

10.清空顺序表

//清空顺序表
void Clearlist(Sqlist &l) {
    l.length=0;
}

11.求顺序表的长度

//求顺序表的长度
int Length(Sqlist l) {
    return l.length;
}


12.输出顺序表中的元素  //遍历

//输出顺序表中的元素
void Printflist(Sqlist l) {
    int i=0;
    while(l.data[i]) {
        cout<<l.data[i]<<" ";
        i++;
    }
    cout<<endl;
}

13.主函数:

int main () {
    Sqlist l;
    int e,i;
    Initlist(l);
    Create(l);
    cout<<"刚刚创建的顺序表为:";
    Printflist(l);
    cout<<"刚刚创建的顺序表长度为:";
    Length(l);
    cout<<endl;


    Isempty(l);
    Isfull(l);
    e=Getelem(l,3);
    cout<<"刚刚创建的顺序表的第3个位置的元素为:";
    cout<<e<<endl;

    i=Locatedelem(l,3);
    cout<<"刚刚创建的顺序表中元素3的位置为:";
    cout<<i<<endl;

    Insert_elem(l,3,2);
    cout<<"在刚刚创建的顺序表中第三个位置插入元素2后的顺序表为:";
    Printflist(l);
    cout<<"在刚刚创建的顺序表中第三个位置插入元素2后的顺序表长度为:";
    Length(l);
    cout<<endl;

    Delete_elem(l,3,2);
    cout<<"在刚刚创建的顺序表中第3个位置删除元素2后的顺序表为:";
    Printflist(l);
    cout<<"在刚刚创建的顺序表中第3个位置删除元素2后的顺序表长度为:";
    Length(l);

    cout<<endl;
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值