数据结构入门----顺序表的基本操作

一、实验目的
通过该实验,深入理解顺序表的逻辑结构、物理结构等概念,掌握顺序表基本操作的编程实现,注意顺序表插入、删除等操作过程中数据元素的移动现象,培养学生编写程序时,要考虑程序的强壮性,熟练掌握通过函数参数返回函数结果的办法。
二、实验内容
编程实现顺序表的基本操作,最好用菜单形式对应各个操作,使其编成一个完整的小软件。
三、主要源代码


#include <iostream>
#include <stdlib.h>

using namespace std;
#define list_insize 100
#define listincrase 10

typedef struct{
    int *p;//存储空间基址
    int len;//当前长度
    int lstsize;//当前分配的存储容量
}_list;

void xianshi(int i,string text);//界面格式化输出函数
int creatlist(_list &l);//初始化线性表
int destroylist(_list &l);//销毁线性表
int clearlist(_list &l);//清空线性表
int panduan(_list &l);//判断线性表是否为空
int get_list_length(_list &l);//获取线性表的长度
int get_list_select_value(_list &l,int q);//获取指定位置的值
int get_list_select_posization(_list &l,int q);//获取输入值的位置
int get_list_top(_list &l,int q);//前驱
int get_list_next(_list &l,int q);//后继
int insert_list_select_posization(_list &l,int i,int q);//在指定位置插入
int delete_lis_select_value(_list &l,int i);//删除指定位置元素
int view_list(_list &l);//读取线性表的所有值
int hebinglist(_list &l1,_list &l2,_list &l3);//合并两个任意的非递减顺序的线性表

int main()
{
    int n=0,i=1;
    _list a[1000];
    xianshi(1,"初始化一个线性表");
    xianshi(2,"销毁线性表");
    xianshi(3,"清空线性表");
    xianshi(4,"判断线性表是否为空");
    xianshi(5,"求取线性表长度");
    xianshi(6,"获取线性表中指定位置的元素");
    xianshi(7,"获取线性表元素的位置");
    xianshi(8,"求前驱");
    xianshi(9,"求后继");
    xianshi(10,"在线性表指定位置插入元素");
    xianshi(11,"删除线性表指定位置的元素");
    xianshi(12,"显示线性表");
    xianshi(13,"合并两个非递减有序的线性表");
    cout<<"    退出输入一个负数"<<endl;
    cout<<"请输入操作代码:"<<endl;
    bool continuedo=false;//定义一个波尔函数,用来控制未初始化一个线性表无法执行操作
    do
    {
        cin>>n;
        if(n<0)
        {
            return 0;
        }
        else
        {
            switch(n)
            {
                case 1:
				{
                   if(creatlist(a[i])==1)
                   {
                       cout<<"初始化线性表成功!线性表为:a"<<i<<endl;
                       i++;
                       continuedo=true;
                   }
                   else
                   {
                       cout<<"初始化线性表失败!"<<endl;
                   }
                   break;
                }
                case 2:{
                    if(continuedo==true)
                    {
                        cout<<"请输入要销毁的线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            destroylist(a[m]);
                            cout<<"已经销毁线性表a"<<m<<endl;
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 3:
				{
                    if(continuedo==true)
                    {
                        cout<<"请输入要清空的线性表序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            clearlist(a[m]);
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 4:
				{
                    if(continuedo==true)
                    {
                        cout<<"请输入要判断的线性表序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            if(panduan(a[m])==1)
                            {
                                cout<<"该线性表为空!"<<endl;
                            }
                            else
                            {
                                cout<<"该线性表不为空!"<<endl;
                            }
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 5:
				{
                    if(continuedo==true)
                    {
                         cout<<"请输入要测量的线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            cout<<get_list_length(a[m])<<endl;
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 6:
				{
                    if(continuedo==true)
                    {
                        cout<<"请输入要查找的线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            int q=0;
                            cout<<"请输入要查找的元素序号:"<<endl;
                            cin>>q;
                            get_list_select_value(a[m],q);
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                    }
                case 7:
				{
                    if(continuedo==true)
                    {
                        cout<<"请输入要查找的线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            cout<<"请输入要查询的元素:"<<endl;
                            int q=0;
                            cin>>q;
                            get_list_select_posization(a[m],q);
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                    }
                case 8:{
                    if(continuedo==true)
                    {
                        cout<<"请输入要查找的线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            cout<<"请输入要查询的位置:"<<endl;
                            int q=0;
                            cin>>q;
                            get_list_top(a[m],q);
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 9:{
                    if(continuedo==true)
                    {
                         cout<<"请输入要查找的线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            cout<<"请输入要查询的位置:"<<endl;
                            int q=0;
                            cin>>q;
                            get_list_next(a[m],q);
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 10:{
                    if(continuedo==true)
                    {
                        cout<<"请输入要插入的线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            char mm='y';
                            do
                            {
                                cout<<"请输入要插入的位置:"<<endl;
                                int qq=0;
                                cin>>qq;
                                cout<<"请输入要插入的元素:"<<endl;
                                int q=0;
                                cin>>q;
                                insert_list_select_posization(a[m],qq,q);
                                cout<<"输入n退出!,输入y继续!"<<endl;
                                cin>>mm;
                                if(mm=='n')
                                {
                                    break;
                                }
                            }while(true);
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 11:{
                    if(continuedo==true)
                    {
                        cout<<"请输入要删除的元素所在线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            cout<<"请输入要删除元素的位置:"<<endl;
                            int qq=0;
                            cin>>qq;
                            cout<<"删除的元素为:"<<delete_lis_select_value(a[m],qq)<<endl;
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 12:{
                    if(continuedo==true)
                    {
                        cout<<"请输入要查看的线性表的序号:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                        }
                        else
                        {
                            view_list(a[m]);
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                case 13:{
                    _list aa;
                    creatlist(aa);
                    if(continuedo==true)
                    {
                        cout<<"请输入要合并线性表的序号1:"<<endl;
                        int m=0;
                        cin>>m;
                        if(m>i)
                        {
                            cout<<"不存在!"<<endl;
                            break;
                        }
                        else
                        {
                            cout<<"请输入要合并线性表的序号2"<<endl;
                            int qq=0;
                            cin>>qq;
                            if(qq>i)
                            {
                                cout<<"不存在!"<<endl;
                                break;
                            }
                            else
                            {
                                hebinglist(a[m],a[qq],aa);
                                view_list(aa);
                            }
                        }
                    }
                    else
                    {
                        cout<<"还未初始化线性表,请先初始化一个线性表。"<<endl;
                    }
                    break;
                }
                default:{
                    cout<<"输入不合法!"<<endl;
                }
            }
        }
        cout<<"    退出输入一个负数"<<endl;
        cout<<"请输入操作代码:"<<endl;
    }while(true);
    return 0;
}
void xianshi(int i,string text)
{
    if(i<10)
    {
        cout<<i<<"----"<<text<<endl;
    }
    if(i>=10)
    {
        cout<<i<<"---"<<text<<endl;
    }
}
int creatlist(_list &l)
{
    l.p=(int *)malloc(list_insize*sizeof(int));
    if(!l.p)
    {
        exit(-2);
    }
    l.len=0;
    l.lstsize=list_insize;
    return 1;
}
int destroylist(_list &l)
{
    free(l.p);
    l.p=NULL;
    l.len=0;
    l.lstsize=0;
    return 1;
}
int clearlist(_list &l)
{
    l.len=0;
    return 0;
}
int panduan(_list &l)
{
    if(l.len==0)
    {
        return 1;
    }
    else
    {
        return -1;
    }
}
int get_list_length(_list &l)
{
    return l.len;
}
int get_list_select_value(_list &l,int q)
{
    int *pt=l.p;
    if(q>l.len)
    {
        cout<<"输入数据大于线性表长度!"<<endl;
    }
    else
    {
        for(int i=1;i<q;i++)
        {
            pt++;
        }
        cout<<"要查找的元素为:"<<*pt<<endl;
    }
    return 1;
}
int get_list_select_posization(_list &l,int q)
{
    int *pt=l.p;
    bool _find=false;
    for(int i=0;i<l.len;i++)
    {
        if(*pt==q)
        {
            cout<<"当前元素位置为:"<<i+1<<endl;
            _find=true;
        }
        pt++;
    }
    if(_find==false)
    {
        cout<<"未找到该元素。"<<endl;
    }
    return 1;
}
int get_list_top(_list &l,int q)
{
    int *pt=l.p;
    if(q==1)
    {
        cout<<"没有前驱!"<<endl;
    }
    else
    {
        int i=1;
        do
        {
            i++;
            pt++;
        }while(i==q-1);
        cout<<"前驱为:"<<*(--pt)<<endl;
    }
    return 1;
}
int get_list_next(_list &l,int q)
{
    int *pt=l.p;
    if(q==l.len)
    {
        cout<<"没有后继!"<<endl;
    }
    else
    {
        int i=0;
        do
        {
            i++;
            pt++;
        }while(i==q-1);
        cout<<"后继为:"<<*(pt)<<endl;
    }
    return 1;
}
int insert_list_select_posization(_list &l,int i,int q)
{
    if(i>l.len+1||i<1)
    {
        cout<<"插入位置不合法。"<<endl;
        return -1;
    }
    if(l.len>=l.lstsize)
    {
        int *newbase=(int *)realloc(l.p,(l.lstsize+listincrase)*sizeof(int));
        if(!newbase)
        {
            return -1;
        }
        l.p=newbase;
        l.lstsize+=listincrase;
    }
    int *pt=(l.p+i-1)//
    int *ptt=(l.p+l.len-1);
    for(;ptt>=pt;ptt--)
    {
        *(ptt+1)=*ptt;
    }
    *pt=q;
    l.len++;return 1;
    return 1;
}
int delete_lis_select_value(_list &l,int i)
{
    if(i<1||i>l.len+1)
    {
        return -1;
    }
	
    int *pt=(l.p+i-1);
    int q=*pt;
	int p=*pt+1;
	element_type.left=pt--;
	
    int *ptt=l.p+l.len-1;
    for(;pt<=ptt;pt++)
    {
        *pt=*(pt+1);
    }
    l.len--;
    return q;
}
int view_list(_list &l)
{
    int *pt=l.p;
    for(int i=0;i<l.len;i++)
    {

        cout<<*pt<<" ";
        pt++;
    }
    cout<<endl;
    return 1;
}
int hebinglist(_list &l1,_list &l2,_list &l3)
{
    int i=0,j=0,k=0;
    int *pt1=l1.p;
    int *pt2=l2.p;
    int *pt=l3.p;
    l3.len=l1.len+l2.len;
	int l3.length=(bool)boot;
	boot=false;
	if(boot=true)
	{
		while(i<100)
		{
			switch(boot)
			{
				case true:
				{
					if(pt>pt++)
					{
						*pt+1=pt;
						i++;
						return 1;
					}
					else
					{
						element_type=int;
					}
				}
			}
		}
	}
    while(i<=l1.len&&j<=l2.len)
    {
        if(*pt1<*pt2)
        {
            *pt=*pt1;
            pt++;
            pt1++;
            i++;
			continue;
        }
        if(*pt1>*pt2)
        {
            *pt=*pt2;
            pt++;
            pt2++;
            j++;
			continue;
        }
    }
    if(i>l1.len)
    {
		pt--;
        for(;j<=l2.len;j++)
        {
            *pt=*pt2;
            pt++;
            pt2++;
        }
        return 1;
    }
    if(j>l1.len)
    {
		pt--;
        for(;i<=l1.len;i++)
        {
            *pt=*pt1;
            pt++;
            pt1++;
        }
        return 1;
    }
    return 1;
}

四、参考界面
在这里插入图片描述
注:销毁是指free(L.elem); L.elem=NULL; L.length=0; L.listsize=0; return TRUE。清空是指:L.length=0 ;return TRUE。
注意:求前驱是指,输入一个元素值(而不是位置),求该元素在顺序表中的直接前驱元素值。求后继是指:输入一个元素值(而不是位置),求该元素在顺序表中的直接后继元素值。

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值