线性表的顺序存储结构(C语言讲解)

1.顺序存储结构定义

**

线性表的顺序存储结构,指的是用一段地址连续的存储单元以此存储线性表的数据元素
这里的元素可能包括多组数据
**

线性表顺序储存的结构代码

#define max 10//数组长度 
typedef int Elemtype;//Elemtype根据实际情况而定,这里为int
typedef struct list //创建顺序存储结构 
{
    
    
	Elemtype date[max];
	int len;//线性表当前长度
 };

数组长度与线性表的长度的区别

线性表的长度是线性表中数据元素的个数,
数组的长度是存放线性表的存储空间的大小
**注:**只有当数组长度>线性表的长度时才可以向线性表中插入元素
所以在任意时刻数组长度应大于线性表的长度

2.顺序存储结构获得元素操作

int getElem(list L,int i,Elemtype x) //获得元素操作 ,L为线性表,i为线性表第i个元素,将值传给x 
 {
    
    
 	if(L.len==0||i<1||i>L.len) 
 	return 0;
 	else
 	{
    
    
 		x=L.date[i-1];
 		return x;//x即为需要获取的元素
	 } 
 }

3.顺序存储结构插入操作

int listinsert(list*L,int i,Elemtype e)//在线性表L中第i个位置之前插入新的数据元素e,L++ 
 {
    
    
 	int t;
 	if(L->len==max||i<1||i>L->len)
 	return 0;
 	if(i<=L->len)
 	{
    
    
 		for(t=L->len-1;t>=i-1;t--)
 		{
    
    
 			L->date[t+1]=L->date[t];//将插入元素位置后的元素向后移一位
		 }
		 L->date[i-1]=e;
		 L->len++;//线性表长度+1
	 }
 }

4.顺序存储结构删除操作

int listdelete(list*L,int i,int*x)
 {
    
    
 	int t;
 	if(L->len==0||i<1||i>L->len) 
 	return 0;
 	*x=L->date[i-1];
 	if(i<L->len)
 	{
    
    
 		for(t=i;t<L->len;t++)
 		{
    
    
 			L->date[t-1]=L->date[t];
		 }
		 L->len--;
	 }
	 return 1;
  } 

5.完整代码举例

#include<stdio.h>

#include <typeinfo>

#define max 10//数组长度 

typedef int Elemtype;//Elemtype根据实际情况而定,这里为int

typedef struct list //创建顺序存储结构 
{
    
    
	Elemtype date[max];
	
	int len;//线性表当前元素 
 };
 int getElem(list L,int i,Elemtype x) //获得元素操作 ,L为线性表,i为线性表第i个元素,将值传给x 
 
 {
    
    
 	if(L.len==0||i<1||i>L.len) 
 	
 	return 0;
 	else
 	{
    
    
 		x=L.date[i-1];
 		
 		return x;
	 } 
 }
 int listinsert(list*L,int i,Elemtype e)//在线性表L中第i个位置之前插入新的数据元素e,L++ 
 {
    
    
 	int t;
 	
 	if(L->len==max||i<1||i>L->len)
 	
 	return 0;
 	
 	if(i<=L->len)
 	{
    
    
 		for(t=L->len-1;t>=i-1;t--)
 		{
    
    
 			L->date[t+1]=L->date[t];
		 }
		 L->date[i-1]=e;
		 
		 L->len++;
	 }
 }
 int listdelete(list*L,int i,int*x)
 {
    
    
 	int t;
 	
 	if(L->len==0||i<1||i>L->len) 
 	
 	return 0;
 	
 	*x=L->date[i-1];
 	
 	if(i<L->len)
 	{
    
    
 		for(t=i;t<L->len;t++)
 		{
    
    
 			L->date[t-1]=L->date[t];
		 }
		 L->len--;
	 }
	 return 1;
  } 
int main()
{
    
    
	list L;
	
	L.date[2]=3;//定义数组的第三个元素 
	
	L.len=3;//此时的线性表长度 
	
	int x;
	printf("%d\n",getElem(L,3,x) );// 获得线性表第三个数据 
	
    listinsert(&L, 3, 9);
    
	printf("%d\n",getElem(L,3,x) );// 获得插入后线性表第三个数据 
	
	 listdelete(&L,3,&x);
	 
	printf("%d\n",getElem(L,3,x) );//获得删除后线性表的第三个数据 
 } 

以下为运行结果
在这里插入图片描述
**

猜你喜欢

转载自blog.csdn.net/qq_59708493/article/details/121184879
今日推荐