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

来源:互联网 发布:gtp软件手机版 编辑:程序博客网 时间:2024/05/16 15:36

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

线性表: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个位置插入元素esvoid Delete_elem(Sqlist &l,int i,int *e);  //在线性表的第i个位置删除元素evoid 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) {//将线性表的表长置为0l.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) {//表长是否=0if(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个位置插入元素evoid 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个位置删除元素evoid 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;}


0 0
原创粉丝点击