第三周 --顺序表 的基本运算

来源:互联网 发布:拉爆淘宝首页流量 编辑:程序博客网 时间:2024/05/18 06:19
  1. /*  
  2.  *Copyright (c) 2017, 烟台大学计算机学院  
  3.  *All rights reserved.  
  4.  *文件名称:asd.cpp  
  5.  *作    者:李金朴  
  6.  *完成日期:2017年9月18日  
  7.  *版 本 号:v1.0  
  8.  *  
  9.  *问题描述:顺序表基本算法的实现  
  10.  *输入描述:一组数  
  11.  *程序输出:见程序运行截屏  
  12.  */    
  13.  #include<iostream>///共实现了顺序表的十个基本算法    
  14.  #include<stdlib.h>    
  15.  using namespace std;    
  16.  # define listinitsize 100    
  17.  typedef struct    
  18.  {    
  19.      int *elem;    
  20.      int length;    
  21.      int listsize;    
  22.  }sqlist;    
  23.  int initlist(sqlist &p)///初始化    
  24.  {    
  25.      p.elem=(int *)malloc(listinitsize*sizeof(int));    
  26.      if(!p.elem)    
  27.         return 0;    
  28.      p.length=0;    
  29.      p.listsize=listinitsize;    
  30.      return 1;    
  31.  }    
  32.  void creat(sqlist &p,int k)///创建顺序表    
  33.  {    
  34.      int i;    
  35.      for(i=0;i<k;i++)    
  36.      {    
  37.          cin>>p.elem[i];    
  38.          p.length++;    
  39.      }    
  40.  }    
  41.  void display(sqlist &p)///输出    
  42.  {    
  43.      int i=0;    
  44.      if(p.length==0)    
  45.      {    
  46.          cout<<"该顺序表为空"<<endl;    
  47.          return;///自己对return的认识太片面了!    
  48.      }    
  49.      while(i!=p.length-1)    
  50.      {    
  51.          cout<<p.elem[i]<<' ';    
  52.          i++;    
  53.      }    
  54.     cout<<p.elem[i]<<endl;    
  55.  }    
  56.  int listempty(sqlist &p)///是空返回1,不是空返回0    
  57.  {    
  58.      if(!p.length)    
  59.         return 1;    
  60.      else    
  61.         return 0;    
  62.  }    
  63.  void zhiweiempty(sqlist &p)///将顺序表置为空表    
  64.  {    
  65.      p.length=0;    
  66.  }    
  67.  int listlength(sqlist &p)///求顺序表的长度    
  68.  {    
  69.      return p.length;    
  70.  }    
  71.  int getelem(sqlist &p,int q)///求顺序表中的第q个元素,若不存在,则返回零    
  72.  {    
  73.      int i=1;    
  74.      while(i!=q)    
  75.      {    
  76.          i++;    
  77.      }    
  78.      if(i<p.length&&i==q)    
  79.         return p.elem[i-1];    
  80.      else    
  81.         return 0;    
  82.  }    
  83.  int donglist(sqlist &p,int f)///求顺序表中第一个与输入元素相同的元素的逻辑序号    
  84.  {    
  85.      int i=0;    
  86.      while(p.elem[i]!=f&&i<p.length)    
  87.      {    
  88.          i++;    
  89.      }    
  90.      if(i<=p.length-1)    
  91.         return i+1;    
  92.      else    
  93.         return 0;    
  94.  }    
  95.  int insertlist(sqlist &p,int n,int m)///在顺序表的第n个位置插入新元素    
  96.  {    
  97.      int i;    
  98.      if(n>p.length+1||n<1)///若插入位置错误则结束函数调用    
  99.         return 0;    
  100.      for(i=p.length;i>=n;i--)    
  101.      {    
  102.          p.elem[i]=p.elem[i-1];    
  103.      }    
  104.      p.elem[n-1]=m;    
  105.      p.length++;    
  106.      return 0;    
  107.  }    
  108.  int deletelist(sqlist &p,int n)///删除顺序表的第n个元素    
  109.  {    
  110.      int i;    
  111.      if(n<1||n>p.length)    
  112.         return 0;    
  113.      for(i=n-1;i<p.length-1;i++)    
  114.      {    
  115.          p.elem[i]=p.elem[i+1];    
  116.      }    
  117.      p.length--;    
  118.      return 0;    
  119.  }    
  120.  void destroylist(sqlist *&x)    
  121.  {    
  122.      free(x);    
  123.      cout<<"顺序表已被销毁"<<endl;    
  124.  }    
  125.  int main()    
  126.  {    
  127.      sqlist p,*x;    
  128.      x=&p;    
  129.      int k,s,h,z,g,c,e,w,u,r,b;    
  130.      cin>>k;    
  131.      initlist(p); ///初始化    
  132.      creat(p,k);    
  133.      display(p);    
  134.      cin>>r;    
  135.      deletelist(p,r);    
  136.      display(p);    
  137.      cin>>u>>b;    
  138.      insertlist(p,u,b);    
  139.      display(p);    
  140.      cin>>c;    
  141.      g=getelem(p,c);    
  142.      cout<<g<<endl;    
  143.      cin>>e;    
  144.      w=donglist(p,e);    
  145.      cout<<w<<endl;    
  146.      z=listlength(p);    
  147.      cout<<z<<endl;    
  148.      s=listempty(p);    
  149.      cout<<s<<endl;    
  150.      zhiweiempty(p);    
  151.      h=listempty(p);    
  152.      cout<<h<<endl;    
  153.      display(p);    
  154.      destroylist(x);///虽然我们刚刚申请到的内存空间被释放掉了,但其中的值并没有消失!!!    
  155.      display(p);    
  156.      cout<<x->elem[5]<<endl;///这个还是很有意思的,通过程序的运行结果我们知道数据仍然存在!    
  157.      return 0;    
  158.  }    

运行结果:

[cpp] view plain copy
  1. uY3Nkbi5uZXQvTGZlbEw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">