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

来源:互联网 发布:电工模拟接线软件 编辑:程序博客网 时间:2024/05/17 13:43

问题及描述

/*  *Copyright (c) 2017, 烟台大学计算机学院  *All rights reserved.  *文件名称:asd.cpp  *作    者:李金朴  *完成日期:2017年9月18日  *版 本 号:v1.0  *  *问题描述:顺序表基本算法的实现  *输入描述:一组数  *程序输出:见程序运行截屏  */   #include<iostream>///共实现了顺序表的十个基本算法   #include<stdlib.h>   using namespace std;   # define listinitsize 100   typedef struct   {       int *elem;       int length;       int listsize;   }sqlist;   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;   }   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;   }  

运行结果:

uY3Nkbi5uZXQvTGZlbEw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">




原创粉丝点击