C++实现线性顺序表的初始化,插入,删除,销毁,清空等功能
以下代码主要严蔚参考**编的《数据结构》(C语言)编写
//线性顺序表 #include <iostream> #define MAX_INTT_LIST 100 #define Elemtype int #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; using namespace std; typedef struct List {
Elemtype *Elem; int Length; int Listsize; }; Status InitList( List &L) //初始化一个线性表; {
L.Elem=new Elemtype[MAX_INTT_LIST]; if(!L.Elem) {
return ERROR; } else {
L.Length=0; L.Listsize=MAX_INTT_LIST ; return OK; } } void DestoryList(List &L)//销毁一个线性表 {
delete[] L.Elem; L.Length=0; L.Listsize=0; } void ClearList(List &L)//清空一个线性表 {
L.Length=0; } int ListLength(List L)//返回线性表的长度 {
return L.Length; } Status GetElem (List L,int i, Elemtype &e)//用e返回线性表L中第i个数据元素的值 {
if(i>ListLength(L)||i<0) {
return FALSE; } else {
e=L.Elem[i]; return TRUE; } } Status ListEmpty(List L)//查看线性表L是否为空 {
if(L.Length==0) return TRUE; else return FALSE; } Status compare(Elemtype a,Elemtype b) {
if(a==b) return TRUE; else return FALSE; } int LocateElem(List L, Elemtype e,Status (*compare)(Elemtype a,Elemtype b))//返回线性表中第一个与e满足compare()关系的数据元素的位序 {
int i=1; while(i<=L.Length&&!(*compare)(L.Elem[i],e)) i++; if(i<=L.Length) return i; else return 0; } void PriorElem(List L, Elemtype cur_e, Elemtype &pre_e)//在线性表L中求数据元素cur_e的前驱 {
for(int i=1; i<=L.Length; i++) {
if(L.Elem[i]==cur_e&&i!=1) {
pre_e=L.Elem[i-1]; break; } } } void NextElem(List L,Elemtype cur_e,Elemtype &next_e)//在线性表L中求数据元素cur_e的后继 {
for(int i=1; i<=L.Length; i++) {
if(L.Elem[i]==cur_e&&i!=L.Length) {
next_e=L.Elem[i+1]; break; } } } void ListInsert(List &L,int i,Elemtype e)//在线性表L中插入一个新的元素 {
if(i<=L.Length+1&&i>=1) {
for(int k=L.Length+1; k>i; k--) {
L.Elem[k]=L.Elem[k-1]; } L.Elem[i]=e; L.Length++; } } void ListDelete(List &L,int i,Elemtype &e)//在线性表L中删除第i个数据元素 {
if(i<=L.Length&&i>=1&&!ListEmpty(L)) {
e=L.Elem[i]; for(int k=i; k<=L.Length; k++) {
L.Elem[k]=L.Elem[k+1]; } L.Length--; } } Elemtype visit(List L,int i) {
if(L.Elem[i]!=NULL) return L.Elem[i]; else return FALSE; } Elemtype ListTraverse(List L,Elemtype (*vist)(List L,int i))//遍历线性表 {
for(int i=1; i<=L.Length; i++) {
if(vist(L,i)) return L.Elem[i]; else return FALSE; } } int main() {
List L; int e=0; Elemtype pre_e=0,next_e=0; InitList(L); cout<<ListEmpty(L)<<endl; ListInsert(L,1,6); ListInsert(L,2,7); ListInsert(L,3,8); for(int i=1; i<=L.Length; i++) {
cout<<L.Elem[i]<<" "; } cout<<endl; GetElem(L,2,e); cout<<e<<endl; PriorElem(L,7,pre_e); cout<<pre_e<<endl; NextElem(L,7,next_e); cout<<next_e<<endl; cout<<LocateElem(L,8,(*compare))<<endl; ListDelete(L,3,e); cout<<e<<endl; for(int i=1; i<=L.Length; i++) {
cout<<L.Elem[i]<<" "; } cout<<endl; }
讯享网
最近在提前预习数据结构这门课,在阅读严蔚敏的《数据结构》时发现书上的这一部分并未给出详细代码,于是在这里写下自己写的代码,希望能够给同样学习这方面知识的小伙伴一点参考。
若以上代码有任何错误或可以改进的地方欢迎在评论区指出并讨论。
感谢你的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/11403.html