数据结构(寒假小结)——2.1线性表之顺序表

来源:互联网 发布:fdd网络 编辑:程序博客网 时间:2024/06/08 14:47

1、本节学习要点:

  • (1).基本定义
  • (2).基本运算
  • (3).经典案例:A与B的并集

.2、基本定义:

3、基本运算:

#include<iostream.h>typedef int datatype;//结点的数据类型,假设为intconst int maxsize=100;//最大表长度,假设为100typedef struct {   datatype data[maxsize]; //第一个结点是data[0]   int n; //当前长度} sqlist; //顺序表类型//将x插入到顺序表L的第i个位置上int insert(sqlist *L,datatype x,int i){   int j;  if(L->n==maxsize)  {cout<<"表满,不能插入!(上溢)\n";return 1;}  if(i<1 || i>L->n+1)    {cout<<"非法插入位置!\n";return 0;}  for(j=L->n;j>=i;j--)     L->data[j]=L->data[j-1];    //结点后移  L->data[i-1]=x;              //插入x,第i个结点的数组下标是i-1  L->n++;    //修改表长  return 1;      //插入成功}//从顺序表中删除第i个位置上的结点int deletes(sqlist *L,int i){  int j;  if(L->n==0)    {cout<<"表空,不能删除!(下溢)\n";return 1;}  if(i<1 || i>L->n)    {cout<<"非法删除位置!\n";return 0;}  for(j=i+1;j<=L->n;j++)    L->data[j-2]=L->data[j-1];//结点前移  L->n--;//修改表长  return 1;//删除成功}//从顺序表中定位数据int locate(sqlist *L,datatype x) {   int i;   i=1;   while(i<=L->n && L->data[i-1]!=x) i++;   if(i<=L->n) return i;//找到   else return 0;//未找到}//输出顺序表void print(sqlist *L){cout<<"The sqlist is: "<<endl;for(int i=0;i<L->n;i++){cout<<L->data[i]<<" ";}cout<<endl;}void main(){    int d[10]={1,1,2,3,4,7,8,9,6,5};//数据源,当然也可以通过输入,这里不写了sqlist *L=new sqlist;//实例化sqlist类型L->n=10;//顺序表中的字符初始化for(int i=0;i<10;i++){L->data[i]=d[i];}cout<<"Before insert..."<<endl;print(L);//调用插入    cout<<"After insert..."<<endl;insert(L,17,5);print(L);//调用删除//  deletes(L,2);//调用定位  //  locate(L,2)}

4、经典案例:A与B的并集:

#include<iostream.h>typedef int datatype;    //线性表结点的数据类型const int maxsize=100;   //线性表可能的最大长度,假设为100//每个线性表都是一个struct类型的结点(声明为sqlist类型),这个struct类型结构如下:struct sqlist{               //  也就是说,每个线性表都是sqlist类型,这个sqlist类型是用户自定义的结构类型,跟int一样可以用来说明变量    datatype data[maxsize];  //  线性表的内容存放在一个data数组当中    int n;                   //  线性表的长度用变量n来记录};//定位操作int locate(sqlist *L,datatype x) {   int i;   i=1;   while(i<=L->n && L->data[i-1]!=x) i++;   if(i<=L->n) return i;    //找到   else return 0;        //未找到}//求集合交集void intersection(sqlist *A,sqlist *B) {     int m,n,i,k,s=0;    datatype x;    for(i=0;i<A->n;i++) {        x=A->data[i];        //在A中取一元素        k=locate(B,x);        //在B中查找它            if(k==0) s++;  //k==0表示未在B中找到该元素        else if(s>0) A->data[i-s]=A->data[i];     }    A->n=A->n-s;    }//输出顺序表void print1(sqlist *L){    cout<<"The sqlist is: "<<endl;    for(int i=0;i<L->n;i++){        cout<<L->data[i]<<" ";    }    cout<<endl;}int main(){    sqlist *sq1=new sqlist;  //为sq1开辟内存空间,如果缺少new,则sq1未被初始化!    sqlist *sq2=new sqlist;    int n1,n2,i,position;    cout<<"How many elements of the sqlist 1?"<<endl;    cin>>n1;    sq1->n=n1;    cout<<"Input the "<<n1<<" elements of the sqlist 1:"<<endl;    for(i=0;i<n1;i++){        cin>>sq1->data[i];    }    cout<<"How many elements of the sqlist 2?"<<endl;    cin>>n2;    sq2->n=n2;    cout<<"Input the "<<n2<<" elements of the sqlist 2:"<<endl;    for(i=0;i<n2;i++){        cin>>sq2->data[i];    }    intersection(sq1,sq2);    print1(sq1);    return 0;}

如果有错误请大家指出,共同学习共同进步!更多百度百科奋斗奋斗

1 0
原创粉丝点击