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

问题及描述:

 

/* 
 *Copyright (c) 2017, 烟台大学计算机学院 
 *All rights reserved. 
 *文件名称:渣.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;  
 }  
  
   运行结果  :

     学习 心得:

   学会了如何利用查找算法实现顺序表的查找 ,有些地方竟然有些胆怯,不敢立马敲;总结起来到底还是写得少呀!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值