线性表之顺序表的创建 初始化 查找 删除 插入和合并

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

本文参考国家精品课程耿国华的数据结构写的,发现了书上的一些问题,并做了简单修正,补足了整个程序过程,若有不足,请跟帖指正!!!


#include<iostream>#include<cstdio>using namespace std;#define MAXSIZE 100#define ERROR 0#define OK 1typedef int ElemType;typedef struct{ ElemType *elem; int last;}SqList;int  Locate(SqList *L, ElemType e)int i=0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/ while ((i<=L->last)&&(L->elem[i]!=e))/*顺序扫描表,直到找到值为e的元素, 或扫描到表尾而没找到*/  i++; if  (i<=L->last)  return(i+1);  /*若找到值为e的元素,则返回其序号*/ else  return(-1);  /*若没找到,则返回空序号*/}/*在顺序表L中第i个数据元素之前插入一个元素e。 插入前表长n=L->last+1,i的合法取值范围是 1≤i≤L->last+2  */int  InsList(SqList *L,int i,ElemType e)int k; if((i<1) || (i>L->last+2)) /*首先判断插入位置是否合法*/ {  printf("插入位置i值不合法");  return(ERROR); } if(L->last>= MAXSIZE-1) {  printf("表已满无法插入");  return(ERROR); } for(k=L->last;k>=i-1;k--)   /*为插入元素而移动位置*/  L->elem[k+1]=L->elem[k]; L->elem[i-1]=e;   /*在C语言数组中,第i个元素的下标为i-1*/ L->last++; return(OK);}int  DelList(SqList *L,int i)/*在顺序表L中删除第i个数据元素。i的合法取值为1≤i≤L.last+1 */int k; if((i<1)||(i>L->last+1)) {  printf("删除位置不合法!");  return(ERROR); } for(k=i; k<=L->last; k++)  L->elem[k-1] = L->elem[k];  /*将后面的元素依次前移*/  L->last--; return(OK);}void print(SqList *L)int i; for(i=0;i<=L->last;i++)  cout<<L->elem[i]<<"  "cout<<endl;}void Init(SqList *L){ L->elem=new ElemType[MAXSIZE]; if(! L->elem) {    exit(0);   }   int n,i=0cout<<"请输入顺序表元素个数"<<endlcin>>n; while(i<n) {  cin>>L->elem[i++]; } L->last=i-1;}void merge(SqList *LA,  SqList *LB,  SqList *LC)int i,j,k; i=0;j=0;k=0while(i<=LA->last&&j<=LB->last)  if(LA->elem[i]<=LB->elem[j])  {   LC->elem[k]= LA->elem[i];   i++;    k++;  }  else  {   LC->elem[k]=LB->elem[j];   j++;    k++;  }  while(i<=LA->last) /*当表LA有剩余元素时,则将表LA余下的元素赋给表LC*/  {   LC->elem[k]= LA->elem[i];   i++;    k++;  }  while(j<=LB->last)  /*当表LB有剩余元素时,则将表LB余下的元素赋给表LC*/   {   LC->elem[k]= LB->elem[j];   j++;    k++;  }  LC->last=LA->last+LB->last+1;  print(LC);}int main(){ SqList L,L1,L2; ElemType e; int i,t; cout<<"顺序表操作顺序:(1.初始化2.查找3.插入4.删除)"<<endl;  Init(&L);  print(&L); /* cout<<"请输入要查找顺序表元素"<<endl; cin>>e; t=Locate(&L,e); if(t) cout<<"第"<<t<<"个!"<<endl; else cout<<"没有找到!"<<endl;    cout<<"请输入要插入的顺序表元素和位置"<<endl;   cin>>e>>i;   t=InsList(&L,i,e);   if(t)   {   cout<<"插入后的顺序表为"<<endl;   print(&L);   }   else cout<<"插入失败!"<<endl;*/ cout<<"请输入要删除的顺序表元素位置"<<endlcin>>i; t=DelList(&L,i); if(t) {  cout<<"删除后的顺序表为"<<endl;  print(&L); } else  cout<<"删除失败!"<<endlcout<<"对L1、L2进行初始化操作:"<<endl; Init(&L1); Init(&L2); cout<<"L1,L2,L合并后为:"<<endl; merge(&L1,&L2,&L); return 0;}

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_43685243/article/details/84107168