您的位置:首页 > 理论基础 > 数据结构算法

数据结构顺序表的基本算法

2017-09-16 18:37 323 查看
/* 

 *Copyright (c) 2017, 烟台大学计算机学院 

 *All rights reserved. 

 *文件名称:数据结构.cpp 

 *作    者:贾存钰 

 *完成日期:2017年9月16日 

 *版 本 号:v1.0 

 * 

 *问题描述:顺序表基本算法的实现 

 *输入描述:一组数 

 *程序输出:见程序运行截屏 

 */  

 #include<iostream>///共实现了顺序表的十个基本算法
1ab26
  

 #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;  

 }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: