第三周项目2-建设“顺序表”算法库

来源:互联网 发布:特勤精英 知乎 编辑:程序博客网 时间:2024/06/11 09:28

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

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

listmain1.cpp

/* *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

#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

#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


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




知识点总结:

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

心得体会:

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

阅读全文
0 0