线性表的顺序储存(顺序表的c++实现)

顺序表的定义 :数据结构在内存中的表示通常有两种形式,即顺序储存表示和链式储存表示。线性表的顺序储存是指用一组地址连续的储存单元依次储存线性表的数据元素,我们把这种储存形式储存的线性表叫做顺序储存。线性表的顺序储存表示又叫做顺序表.

顺序表的实现 :

  1. 顺序表的类型定义:
    #define MAXLEN 100
    typedef int datetype;
    typedef struct
    {
    	datetype date[MAXLEN];
    	int length;
    }SeqList;
  2. 顺序表的初始化:
    void InitList(SeqList *L)//初始化顺序表L函数
    {
    	L->length=0;
    }
  3. 顺序表的建立:
    void SetList(SeqList *L,int n)//建立顺序表并输入多个元素函数
    {
    	int i;
    	cout<<"请输入"<<n<<"个整数"<<endl;
    	for(i=0;i<n;i++)
    	{
    		cin>>L->date[i];
    	}
    	L->length=n;
    }
  4. 查找操作:
    void Getdate(SeqList *L,int x)//在顺序表中定位元素x的函数
    {
    	int flag=0;
    	if(L->length<=0) cout<<"顺序表为空"<<endl;
    	else 
    		for(int i=0;i<L->length;i++)
    		{
                if(x==L->date[i])
    				{
    					cout<<"顺序表中第"<<i+1<<"个位置元素值为"<<x<<endl;
    					flag=1;
    			    }
    		}
    		if(!flag) cout<<"在顺序表中未找到值为"<<x<<"的元素"<<endl;
    }
  5. 插入操作:
    int InsList(SeqList *L,int k,int x)//在顺序表中第k位插入新元素x的函数
    {
    	int i;
    	if(L->length==MAXLEN) 
    	{
    		cout<<"顺序表已满"<<endl;
    		return -1;
    	}
    	if(k<=0||k>L->length+1)
    	{
    		cout<<"插入位置错误"<<endl;
    		return 0;
    	}
    	if(k==L->length)
    		{
    			L->date[k]=x;
    			L->length++;
    			return 1;
    	    }
    	for(i=L->length-1;i>=k-1;i--)
    		L->date[i+1]=L->date[i];
    	L->date[k-1]=x;
    	L->length++;
    	return 1;
    }
  6. 删除操作:
    int Deldate(SeqList *L,int k)//在顺序表中删除第k位元素的函数
    {
    	int i,j;
    	if(L->length<=0)
    	{
    		cout<<"顺序表为空!"<<endl;
    		return 0;
    	}
    	if(k<=0||k>L->length)
    	{
    		cout<<"删除位置不存在"<<endl;
    		return 0;
    	}
    	j=L->date[k-1];
    	for(i=k;i<L->length;i++)
    	{
    		L->date[i-1]=L->date[i];
    	}
    	cout<<"删除元素为:"<<j<<endl;
    	L->length--;
    	return 1;
    }
  7. 输出表中元素:
    void PriList(SeqList *L)//显示输出顺序表中的元素
    {
    	int i;
    	for(i=0;i<L->length;i++)
    		cout<<L->date[i]<<"     ";
    	cout<<endl;
    }
  8. 显示菜单函数:

    void Menu()//显示菜单子函数
    {
    	 cout<<endl<<"            "<<"顺序表的各种操作";
    	 cout<<endl<<"********************************************";
    	 cout<<endl<<"|             1.建立顺序表                  |";
    	 cout<<endl<<"|             2.插入元素                    |";
    	 cout<<endl<<"|             3.删除元素                    |";
    	 cout<<endl<<"|             4.查找元素                    |";
    	 cout<<endl<<"|             5.求顺序表的长度              |";
    	 cout<<endl<<"|             0.返回                        |";
         cout<<endl<<"********************************************";
    	 cout<<endl<<"             请输入菜单号(0—5):           "<<endl;
    }

总代码:

#include <iostream>
#define MAXLEN 100
using namespace std;

typedef int datetype;
typedef struct
{
	datetype date[MAXLEN];
	int length;
}SeqList;
//顺序表的初始化
void InitList(SeqList *L)//初始化顺序表L函数
{
	L->length=0;
}
//顺序表的建立
void SetList(SeqList *L,int n)//建立顺序表并输入多个元素函数
{
	int i;
	cout<<"请输入"<<n<<"个整数"<<endl;
	for(i=0;i<n;i++)
	{
		cin>>L->date[i];
	}
	L->length=n;
}
//查找操作
void Getdate(SeqList *L,int x)//在顺序表中定位元素x的函数
{
	int flag=0;
	if(L->length<=0) cout<<"顺序表为空"<<endl;
	else 
		for(int i=0;i<L->length;i++)
		{
            if(x==L->date[i])
				{
					cout<<"顺序表中第"<<i+1<<"个位置元素值为"<<x<<endl;
					flag=1;
			    }
		}
		if(!flag) cout<<"在顺序表中未找到值为"<<x<<"的元素"<<endl;
}
//插入操作
int InsList(SeqList *L,int k,int x)//在顺序表中第k位插入新元素x的函数
{
	int i;
	if(L->length==MAXLEN) 
	{
		cout<<"顺序表已满"<<endl;
		return -1;
	}
	if(k<=0||k>L->length+1)
	{
		cout<<"插入位置错误"<<endl;
		return 0;
	}
	if(k==L->length)
		{
			L->date[k]=x;
			L->length++;
			return 1;
	    }
	for(i=L->length-1;i>=k-1;i--)
		L->date[i+1]=L->date[i];
	L->date[k-1]=x;
	L->length++;
	return 1;
}
//删除操作
int Deldate(SeqList *L,int k)//在顺序表中删除第k位元素的函数
{
	int i,j;
	if(L->length<=0)
	{
		cout<<"顺序表为空!"<<endl;
		return 0;
	}
	if(k<=0||k>L->length)
	{
		cout<<"删除位置不存在"<<endl;
		return 0;
	}
	j=L->date[k-1];
	for(i=k;i<L->length;i++)
	{
		L->date[i-1]=L->date[i];
	}
	cout<<"删除元素为:"<<j<<endl;
	L->length--;
	return 1;
}
//输出表中元素
void PriList(SeqList *L)//显示输出顺序表中的元素
{
	int i;
	for(i=0;i<L->length;i++)
		cout<<L->date[i]<<"     ";
	cout<<endl;
}
void Menu()//显示菜单子函数
{
	 cout<<endl<<"            "<<"顺序表的各种操作";
	 cout<<endl<<"********************************************";
	 cout<<endl<<"|             1.建立顺序表                  |";
	 cout<<endl<<"|             2.插入元素                    |";
	 cout<<endl<<"|             3.删除元素                    |";
	 cout<<endl<<"|             4.查找元素                    |";
	 cout<<endl<<"|             5.求顺序表的长度              |";
	 cout<<endl<<"|             0.返回                        |";
     cout<<endl<<"********************************************";
	 cout<<endl<<"             请输入菜单号(0—5):           "<<endl;
}
int main()
{
		SeqList L;
		datetype x;
	    int i,j,k,p=1,n;
		L.length=0;
		while(p!=0)
		{
			Menu();
			cin>>p;
			switch(p)
			{
			case     1:
				InitList(&L);
			    cout<<"请输入要加入元素的个数:"<<endl;
				cin>>n;
				SetList(&L,n);
				cout<<"建立的线性表为:"<<endl;
				PriList(&L);
				break;
			case     2:
				cout<<"请输入要插入的位置:"<<endl;
				 cin>>k;
				 cout<<"请输入要插入的元素:"<<endl;
				 cin>>x;
				 if(InsList(&L,k,x))
				 {
				    cout<<"在第"<<k<<"个位置插入的数据为"<<x<<"插入后的顺序表为:"<<endl;
					PriList(&L);
				 }
				 else
				 {
					 cout<<"输入的数据有误!"<<endl;
				 }
				 break;
			case     3:
				cout<<"输入要删除的元素的位置:"<<endl;
				cin>>x;
					if(Deldate(&L,x));
					{
						if(L.length>0)
						{
							cout<<"删除指定元素后的顺序表为:"<<endl;
					        PriList(&L);
						}
						else
							cout<<"删除指定元素后的顺序表为空!"<<endl;
					}

				break;
			case     4:
				cout<<"输入你要查找的元素:"<<endl;
				cin>>x;
				Getdate(&L,x);
				break;
			case     5:
				cout<<"顺序表的长度为:"<<L.length<<endl;
				break;
			case     0:
				cout<<"退出!"<<endl;
				p=0;
				break;
			default :
				cout<<"输入有误,请在0~5之间输入!";
			}
		}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值