顺序表(基础)

目录

一、结构体的一般形式

二、一般形式的顺序表

三、静态顺序表和动态顺序表 

四、容易混淆的点

五、顺序表的基本操作


一、结构体的一般形式

#define N 100
struct seqlist
{
	int a[N];
	int size;//表示数组中存储了多少个有效数据 
 }; 
void seqlist1(struct seqlist*ps,int x);//定义一个seqlist1函数,其作用是往顺序表中插入数据

二、一般形式的顺序表

第一步: 现在整个顺序表存放的是int类型的数据,如果需要存放double类型的数据需要将顺序表中所有的int改成double

struct seqlist
{
    double a[N];
	int size;//表示数组中存储了多少个有效数据 
 }; 
void seqlist1(struct seqlist*ps,double x);

第二步:那么想要存放某一个未知类型的数据,可以利用typedef,之后如果想存放double类型的数据,只需要将typedef int M改成typedef double M。

typedef int M
struct seqlist
{
	M a[N];
	int size;//表示数组中存储了多少个有效数据 
 }; 
void seqlist1(struct seqlist*ps,M x);

第三步:struct  seqlist太长了,也可以利用typedef

typedef int M
typedef struct seqlist
{
	M a[N];
	int size;//表示数组中存储了多少个有效数据 
 }SL; 
void seqlist1(SL*ps,M x);

三、静态顺序表和动态顺序表 

1.静态顺序表:使用定长的数组存储元素
     typedef int M
     typedef struct seqlist
    {
    	M a[N];
	    int size;//表示数组中存储了多少个有效数据 
     }SL; 
2.动态顺序表:使用动态开辟的数组存储
    typedef int M
    typedef struct seqlist
  {
  	 M *array;//指向动态开辟的数组 
  	 M size;//有效数组个数 
  	 M capicity;//容量空间的大小 
   } 

四、容易混淆的点

typedef int M
typedef struct seqlist
{
	M a[N];
	int size;//表示数组中存储了多少个有效数据 
 }SL; 

//接口函数
void seqlistinit(SL*ps)//初始化函数 
void seqlistpushback(struct seqlust*ps,int i)//插入函数===>void seqlistpushback(SL*ps,M i)


//先定义初始化函数
void  seqlistinit(SL*ps) 
{  
	ps->size=0;//ps指向结构体变量s1的地址,通过箭头访问结构体变量s1里面的成员变量size
               //将size初始化为0 
}

void Textseqlist1()
{
	SL s1;//第二步定义一个结构体变量s1,SL s1等价于struct seqlist s1,s1具有数组a和整型size 
	seqlistinit(&s1) ;//然后调用seqlistinit函数,将s1的地址传给ps 
 } 
 
int mian()
{
	Textseqlist();//第一步先调用Textseqlist函数 
	return 0;
}

五、顺序表的基本操作

#include<iostream>
#define N 100
int number;
using namespace std;
typedef struct seqlist
{
	int a[N];
	int size;//表示数组中存放了多少个有效数据 
	int maxsize;//最大容量 
}SL;
void seqlistinit(SL*ps)//初始化函数
{
	ps->size=0;
	ps->maxsize=N;
}
void Length(SL*ps)//求顺序表的长度 
{
	cout<<ps->size<<endl;
}
void displist(SL*ps)//顺序表的录入 
{
	cout<<"请输入准备录入的数据个数:";
	cin>>ps->size;
	cout<<"请依次输入数据:" ;
	int i=0;
	while(i<ps->size)
	{
		cin>>ps->a[i];
		i++;
	 } 
}
int locate(SL*ps)//按位查找 
{
	cout<<"请输入想要查找的顺序表的第几个数据:";
	int i;
	cin>>i;
	cout<<ps->a[i-1]<<endl;
}
int locate2(SL*ps)//按值查找 
{
	cout<<"请输入想要查找的数据:";
	int i;
	cin>>i;
	int j=0;
	while(j<ps->size)
	{
		if((ps->a[j])==i)
		{
			cout<<"查找成功!"<<endl;
			return 0;
		}
		j++;
	}
	cout<<"输入有误!";
 } 
int insert(SL*ps)//插入数据 
{
	cout<<"请分别输入想要插入的一个数据和位置:";
	int m,key,i;
	cin>>m>>key;
	if(key<1||key>(ps->size)+1||ps->size>ps->maxsize)
	{
		cout<<"输入有误!";
		return 0; 
	}
	else
	{
	for(int i=ps->size;i>=key;i--)
	{
		ps->a[i]=ps->a[i-1];
	}
	 ps->a[key-1]=m;
	 (ps->size)++;
	 cout<<"插入成功!"<<endl;
	 return 0;
     }
}
void print(SL*ps)//遍历 
{
	int i;
	for(i=0;i<ps->size;i++)
	{
		cout<<ps->a[i]<<" ";
	}
	cout<<endl;
}
int del(SL*ps)//删除
{
	cout<<"请分别输入想要删除数据的位置:";
	int key,m;
	cin>>key;
	if(key<1||key>(ps->size)+1)
	{
		cout<<"输入有误"<<endl;
		return 0;
	}
    m=ps->a[key-1];
    for(int i=key;i<ps->size;i++)
    {
    	ps->a[i-1]=ps->a[i];
	}
	(ps->size)--;
	cout<<"删除成功!"; 
} 
void menu()    //显示菜单
{
    printf("\n");
   	cout<<"-------------------------------------------------欢迎使用该系统-------------------------------------------------" <<endl;
   	cout<<"                                                   1、录入数据                                   "<<endl;
	cout<<"                                                   2、遍历顺序表                                  "<<endl;   	
	cout<<"                                                   3、插入数据                                    "<<endl;   	
	cout<<"                                                   4、按位置查找数据                                  "<<endl;   	
	cout<<"                                                   5、按值查找数据                                    "<<endl;   	
	cout<<"                                                   6、求顺序表的长度                                    "<<endl;  
	cout<<"                                                   7、删除数据                                    "<<endl;
	cout<<"                                                   8、退出系统                                        "<<endl;
	
}
int main()
{
		SL s1;
		seqlistinit(&s1);
		while(1)
		{
			menu();
			cout<<"请输入菜单编号:";
			cin>>number;
			switch(number)
			{
				case 1:displist(&s1);break;
				case 2:print(&s1);break;
				case 3:insert(&s1);break;
				case 4:locate(&s1);break;
				case 5:locate2(&s1);break;
				case 6:Length(&s1);break;
				case 7:del(&s1);break;
				case 8:exit(0); break;    //退出
                default:printf("输入有误!");
				
			}
		}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序表是一种线性表的存储结构,可以通过连续的存储空间来存储元素。当需要合并两个顺序表时,需要将两个顺序表中的元素按照一定的顺序合并到一个新的顺序表中。 在合并过程中,在考虑元素顺序的基础上,还需要考虑两个顺序表的大小关系。假设要合并两个顺序表 A 和 B,其中 A 的长度为 m, B 的长度为 n,则合并后的顺序表 C 的长度应该为 m+n。 具体的合并过程可以通过遍历两个顺序表,逐个比较元素的大小,并将较小的元素添加到顺序表 C 中。当其中一个顺序表遍历完后,将另一个顺序表的剩余元素直接添加到顺序表 C 后面即可。 举个例子,假设合并前的顺序表 A 中的元素为 [1, 2, 4, 6, 8],顺序表 B 中的元素为 [3, 5, 7, 9]。初始时,顺序表 C 为空。 在遍历的过程中,先比较 A 的第一个元素和 B 的第一个元素,发现 A 的第一个元素较小,将其添加到顺序表 C 中。然后继续比较 A 的第二个元素和 B 的第一个元素,发现 B 的第一个元素较小,将其添加到顺序表 C 中。接着比较 A 的第二个元素和 B 的第二个元素,发现 B 的第二个元素较小,将其添加到顺序表 C 中。以此类推,直到遍历完 A 或者 B 中的元素。 最后,如果 A 中的元素已经全部添加到顺序表 C 中,那么将 B 中剩余的元素直接添加到顺序表 C 中。如果 B 中的元素已经全部添加到顺序表 C 中,那么将 A 中剩余的元素直接添加到顺序表 C 中。 最终,顺序表 C 中的元素为 [1, 2, 3, 4, 5, 6, 7, 8, 9]。合并完成。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值