第三周 建设”顺序表“算法库

还是用到了老知识-多文件组织,但是也有新知识,那就是算法库这个概念;算法库的建立是一个长久的事情,需要的是脚踏实地的精神!

将程序分成三部分;分别是list.h list.cpp和main.cpp;下面来看程序

listmain1.cpp

  1. /* 
  2.  *Copyright © 2017, 烟台大学计算机学院 
  3.  *All rights reserved. 
  4.  *文件名称:shiyan.cpp 
  5.  *作    者:朱坤昂 
  6.  *完成日期:2017年9月11日 
  7.  *版本号:v1.0 
  8.  * 
  9.  *问题描述:顺序表的算法库 
  10.  *输入描述:1 2 
  11.  *程序输出:见截图 
  12.  */  
  13. #include<iostream>  
  14. #include"list1.h"  
  15. using namespace std;  
  16. int main()  
  17. {  
  18.      sqlist p,*x;  
  19.      x=&p;  
  20.      int k,s,h,z,g,c,e,w,u,r,b;  
  21.      cin>>k;  
  22.      initlist(p); ///初始化  
  23.      creat(p,k);  
  24.      display(p);  
  25.      cin>>r;  
  26.      deletelist(p,r);  
  27.      display(p);  
  28.      cin>>u>>b;  
  29.      insertlist(p,u,b);  
  30.      display(p);  
  31.      cin>>c;  
  32.      g=getelem(p,c);  
  33.      cout<<g<<endl;  
  34.      cin>>e;  
  35.      w=donglist(p,e);  
  36.      cout<<w<<endl;  
  37.      z=listlength(p);  
  38.      cout<<z<<endl;  
  39.      s=listempty(p);  
  40.      cout<<s<<endl;  
  41.      zhiweiempty(p);  
  42.      h=listempty(p);  
  43.      cout<<h<<endl;  
  44.      display(p);  
  45.      destroylist(x);///虽然我们刚刚申请到的内存空间被释放掉了,但其中的值并没有消失!!!  
  46.      display(p);  
  47.      cout<<x->elem[5]<<endl;///这个还是很有意思的,通过程序的运行结果我们知道数据仍然存在!  
  48.      return 0;  
  49. }  
/*
 *Copyright © 2017, 烟台大学计算机学院
 *All rights reserved.
 *文件名称:shiyan.cpp
 *作    者:朱坤昂
 *完成日期:2017年9月11日
 *版本号:v1.0
 *
 *问题描述:顺序表的算法库
 *输入描述:1 2
 *程序输出:见截图
 */
#include<iostream>
#include"list1.h"
using namespace std;
int main()
{
     sqlist p,*x;
     x=&p;
     int k,s,h,z,g,c,e,w,u,r,b;
     cin>>k;
     initlist(p); ///初始化
     creat(p,k);
     display(p);
     cin>>r;
     deletelist(p,r);
     display(p);
     cin>>u>>b;
     insertlist(p,u,b);
     display(p);
     cin>>c;
     g=getelem(p,c);
     cout<<g<<endl;
     cin>>e;
     w=donglist(p,e);
     cout<<w<<endl;
     z=listlength(p);
     cout<<z<<endl;
     s=listempty(p);
     cout<<s<<endl;
     zhiweiempty(p);
     h=listempty(p);
     cout<<h<<endl;
     display(p);
     destroylist(x);///虽然我们刚刚申请到的内存空间被释放掉了,但其中的值并没有消失!!!
     display(p);
     cout<<x->elem[5]<<endl;///这个还是很有意思的,通过程序的运行结果我们知道数据仍然存在!
     return 0;
}
list1.cpp

  1. #include"list1.h"  
  2. #include<iostream>  
  3. #include<stdlib.h>  
  4. using namespace std;  
  5. # define listinitsize 100  
  6.  int initlist(sqlist &p)///初始化  
  7.  {  
  8.      p.elem=(int *)malloc(listinitsize*sizeof(int));  
  9.      if(!p.elem)  
  10.         return 0;  
  11.      p.length=0;  
  12.      p.listsize=listinitsize;  
  13.      return 1;  
  14.  }  
  15.  void creat(sqlist &p,int k)///创建顺序表  
  16.  {  
  17.      int i;  
  18.      for(i=0;i<k;i++)  
  19.      {  
  20.          cin>>p.elem[i];  
  21.          p.length++;  
  22.      }  
  23.  }  
  24.  void display(sqlist &p)///输出  
  25.  {  
  26.      int i=0;  
  27.      if(p.length==0)  
  28.      {  
  29.          cout<<"该顺序表为空"<<endl;  
  30.          return;///自己对return的认识太片面了!  
  31.      }  
  32.      while(i!=p.length-1)  
  33.      {  
  34.          cout<<p.elem[i]<<' ';  
  35.          i++;  
  36.      }  
  37.     cout<<p.elem[i]<<endl;  
  38.  }  
  39.  int listempty(sqlist &p)///是空返回1,不是空返回0  
  40.  {  
  41.      if(!p.length)  
  42.         return 1;  
  43.      else  
  44.         return 0;  
  45.  }  
  46.  void zhiweiempty(sqlist &p)///将顺序表置为空表  
  47.  {  
  48.      p.length=0;  
  49.  }  
  50.  int listlength(sqlist &p)///求顺序表的长度  
  51.  {  
  52.      return p.length;  
  53.  }  
  54.  int getelem(sqlist &p,int q)///求顺序表中的第q个元素,若不存在,则返回零  
  55.  {  
  56.      int i=1;  
  57.      while(i!=q)  
  58.      {  
  59.          i++;  
  60.      }  
  61.      if(i<p.length&&i==q)  
  62.         return p.elem[i-1];  
  63.      else  
  64.         return 0;  
  65.  }  
  66.  int donglist(sqlist &p,int f)///求顺序表中第一个与输入元素相同的元素的逻辑序号  
  67.  {  
  68.      int i=0;  
  69.      while(p.elem[i]!=f&&i<p.length)  
  70.      {  
  71.          i++;  
  72.      }  
  73.      if(i<=p.length-1)  
  74.         return i+1;  
  75.      else  
  76.         return 0;  
  77.  }  
  78.  int insertlist(sqlist &p,int n,int m)///在顺序表的第n个位置插入新元素  
  79.  {  
  80.      int i;  
  81.      if(n>p.length+1||n<1)///若插入位置错误则结束函数调用  
  82.         return 0;  
  83.      for(i=p.length;i>=n;i--)  
  84.      {  
  85.          p.elem[i]=p.elem[i-1];  
  86.      }  
  87.      p.elem[n-1]=m;  
  88.      p.length++;  
  89.      return 0;  
  90.  }  
  91.  int deletelist(sqlist &p,int n)///删除顺序表的第n个元素  
  92.  {  
  93.      int i;  
  94.      if(n<1||n>p.length)  
  95.         return 0;  
  96.      for(i=n-1;i<p.length-1;i++)  
  97.      {  
  98.          p.elem[i]=p.elem[i+1];  
  99.      }  
  100.      p.length--;  
  101.      return 0;  
  102.  }  
  103.  void destroylist(sqlist *&x)  
  104.  {  
  105.      free(x);  
  106.      cout<<"顺序表已被销毁"<<endl;  
  107.  }  
#include"list1.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
# define listinitsize 100
 int initlist(sqlist &p)///初始化
 {
     p.elem=(int *)malloc(listinitsize*sizeof(int));
     if(!p.elem)
        return 0;
     p.length=0;
     p.listsize=listinitsize;
     return 1;
 }
 void creat(sqlist &p,int k)///创建顺序表
 {
     int i;
     for(i=0;i<k;i++)
     {
         cin>>p.elem[i];
         p.length++;
     }
 }
 void display(sqlist &p)///输出
 {
     int i=0;
     if(p.length==0)
     {
         cout<<"该顺序表为空"<<endl;
         return;///自己对return的认识太片面了!
     }
     while(i!=p.length-1)
     {
         cout<<p.elem[i]<<' ';
         i++;
     }
    cout<<p.elem[i]<<endl;
 }
 int listempty(sqlist &p)///是空返回1,不是空返回0
 {
     if(!p.length)
        return 1;
     else
        return 0;
 }
 void zhiweiempty(sqlist &p)///将顺序表置为空表
 {
     p.length=0;
 }
 int listlength(sqlist &p)///求顺序表的长度
 {
     return p.length;
 }
 int getelem(sqlist &p,int q)///求顺序表中的第q个元素,若不存在,则返回零
 {
     int i=1;
     while(i!=q)
     {
         i++;
     }
     if(i<p.length&&i==q)
        return p.elem[i-1];
     else
        return 0;
 }
 int donglist(sqlist &p,int f)///求顺序表中第一个与输入元素相同的元素的逻辑序号
 {
     int i=0;
     while(p.elem[i]!=f&&i<p.length)
     {
         i++;
     }
     if(i<=p.length-1)
        return i+1;
     else
        return 0;
 }
 int insertlist(sqlist &p,int n,int m)///在顺序表的第n个位置插入新元素
 {
     int i;
     if(n>p.length+1||n<1)///若插入位置错误则结束函数调用
        return 0;
     for(i=p.length;i>=n;i--)
     {
         p.elem[i]=p.elem[i-1];
     }
     p.elem[n-1]=m;
     p.length++;
     return 0;
 }
 int deletelist(sqlist &p,int n)///删除顺序表的第n个元素
 {
     int i;
     if(n<1||n>p.length)
        return 0;
     for(i=n-1;i<p.length-1;i++)
     {
         p.elem[i]=p.elem[i+1];
     }
     p.length--;
     return 0;
 }
 void destroylist(sqlist *&x)
 {
     free(x);
     cout<<"顺序表已被销毁"<<endl;
 }
list1.h

  1. #ifndef COPY_H_INCLUDED  
  2. #define COPY_H_INCLUDED  
  3. #include <stdio.h>  
  4. typedef struct  
  5.  {  
  6.      int *elem;  
  7.      int length;  
  8.      int listsize;  
  9.  }sqlist;  
  10. int initlist(sqlist &p);  
  11. void creat(sqlist &p,int k);  
  12. void display(sqlist &p);  
  13. int listempty(sqlist &p);  
  14. void zhiweiempty(sqlist &p);  
  15. int listlength(sqlist &p);  
  16. int getelem(sqlist &p,int q);  
  17. int donglist(sqlist &p,int f);  
  18. int insertlist(sqlist &p,int n,int m);  
  19. int deletelist(sqlist &p,int n);  
  20. void destroylist(sqlist *&x);  
  21. #endif // COPY_H_INCLUDED  
#ifndef COPY_H_INCLUDED
#define COPY_H_INCLUDED
#include <stdio.h>
typedef struct
 {
     int *elem;
     int length;
     int listsize;
 }sqlist;
int initlist(sqlist &p);
void creat(sqlist &p,int k);
void display(sqlist &p);
int listempty(sqlist &p);
void zhiweiempty(sqlist &p);
int listlength(sqlist &p);
int getelem(sqlist &p,int q);
int donglist(sqlist &p,int f);
int insertlist(sqlist &p,int n,int m);
int deletelist(sqlist &p,int n);
void destroylist(sqlist *&x);
#endif // COPY_H_INCLUDED


程序运行结果和我建立的算法库:




知识点总结:

   多文件组织+顺序表的基本算法!

心得体会:

  写博客和做算法库都是很有意义的事情!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值