线性表--顺序表

来源:互联网 发布:程序员浏览器 编辑:程序博客网 时间:2024/05/01 01:53

本文章将介绍线性表中的顺序表。

其中包含的操作有:初始化,创建,查找(按值查找和按位置查找),插入,删除(按值删除和按位置删除)

废话少说,直接上码。

/**这里讲的是线性表中顺序表*结构:一个一维数组,一个表示长度的变量*操作:初始化,创建,查找,删除*平均时间复杂度分析方法:每个元素查找的概念*需要移动的元素个数(插入元素算是移动一次)*/#include<iostream>using namespace std;#define MAXSIZE 1000typedef struct{int List[MAXSIZE+1]; //因为位置是从1开始,所以定义的大小应该加上1int ListLen;}SeqList;SeqList seqList;// 可以不用结构,可以直接用// int List[MAXSIZE+1];// int ListLen = 0;//初始化void init(){seqList.ListLen = 0;}//创建int create(int *r,int n){if(n > MAXSIZE)return -1;seqList.ListLen = n;for(int i = 0; i<=n; i++){seqList.List[i] = r[i];}return 1;}//查找int search(int obj){seqList.List[0] = obj;int i = seqList.ListLen;while(seqList.List[i] != obj)i--;return i;}int searchByPos(int pos){if(pos < 1 || pos > seqList.ListLen)return -1;return seqList.List[pos];}//插入int addNode(int pos,int Node){if(pos > seqList.ListLen+1 || pos < 1 || seqList.ListLen == MAXSIZE) //注意已经达到最大长度return -1;for(int i = seqList.ListLen; i >= pos; i--){seqList.List[i+1] = seqList.List[i]; }seqList.List[pos] = Node;seqList.ListLen ++ ;return 1;}//删除int deleteNodeByPos(int pos){if(seqList.ListLen == 0 || pos > seqList.ListLen || pos < 1) //注意顺序表本来是空的情况return -1;for(int i = pos; i< seqList.ListLen; i++)seqList.List[i] = seqList.List[i+1];seqList.ListLen --;return 1;}int deleteNodeByValue(int value){int pos = search(value);if(pos == 1){cout<<value<<"不在顺序表中。"<<endl;return -1;}return deleteNodeByPos(pos);}//输出void show(){for(int i = 1; i<seqList.ListLen; i++ ){cout<<seqList.List[i]<<" ";}cout<<seqList.List[i]<<endl;}int main(){int n,i;int a[MAXSIZE];init();cin>>n;for(i =1;i<=n;i++){cin>>a[i];}create(a,n);cout<<"初始化:"<<endl;show();int deNode;cin>>deNode;deleteNodeByValue(deNode);cout<<"删除: "<<deNode<<endl;show();int pos;cin>>pos;deleteNodeByPos(pos);cout<<"删除位置: "<<pos<<endl;show();int addN;cin>>pos>>addN;addNode(pos,addN);cout<<"在"<<pos<<"位置"<<"插入: "<<addN<<endl;show();int searchNode;cin>>searchNode;cout<<search(searchNode)<<endl;return 0;}




0 0
原创粉丝点击