顺序结构线性表的C语言实现(内含可实现代码)

零、顺序结构线性表考点知识回顾

1. 存在唯一“第一个”数据元素;存在唯一“最后一个”数据元素。
2. 除第一个之外,每个数据元素均只有一个前驱;除最后一个外,每个元素均只有一个后继。

3. 逻辑上相邻,物理上也一定相邻。
4. 可随机存取。
5. 更多的用于查找和修改。

代码预处理

#include<iostream>
#include<cstdlib> 
#define LEN 10 
#define ERROR 0
#define OK 1
using namespace std;

其中using namespace std是c++代码使用iostream头文件时需要写上的 如果使用纯C语言stdio头文件,则不需要这一行

一、加工性操作

0.顺序表结构体定义

typedef struct{
    int *elem; 
	int length;
	int listsize; 
	}SqList; 

1.构造空表

int InitList_Sq(SqList &L)
{
	
    L.elem=(int *)malloc(LEN*sizeof(int)); 
    if(!L.elem)
	{
	    cout<<"初始化失败";
		return ERROR;//判断是否为空表 
	}
	L.length=0;
	L.listsize=LEN; 
	return OK; 
} 

2.置空和销毁

int ClearList(SqList &L)//置空
{
	L.length=0;
	return OK;
} 
int DestroyList(SqList &L)//销毁
{
	free(L.elem);
	return OK;
}

3.插入元素

注意:插入完毕后表长要++

void ListInsert_Sq(SqList &L,int i,int e)
{
    int *p; 
	int *q=&(L.elem[i-1]);
	for(p=&(L.elem[L.length-1]);p>=q;p--)*(p+1)=*p;
	*q=e; 
	++L.length; 
} 

4.删除元素

注意:插入完毕后表长要- -

int ListDelete_sq(SqList &L,int d)
{
	if(d>=1&&d<=L.length)
	{
		int *p=&(L.elem[d-1]); //p为被删除元素的位置 
     	int *q=L.elem+L.length-1;
       	for(++p;p<=q;p++)*(p-1)=*p;
    	--L.length; 
    	cout<<"删除该元素后的表:";
    	for(int j=0;j<L.length;j++)cout<<L.elem[j]<<" ";
    	return OK;
 	}
    else return -1;
}

二、引用型操作

1.判空

int ListEmpty(SqList L)
{
    if(L.length==0)return ERROR;//是空表 
	else return OK;//不是空表 
}

2.求表长

int ListLength(SqList L)
{
    return L.length;
} 

不要怀疑,这个操作就是这么简单。

3.获取元素

int GetElem(SqList L,int j) 
{
    if(j>=1&&j<=L.length)
	{
		int e=L.elem[j-1]; 
        return e; 
	} 
	else return -1;
	
} 

4.获取前驱/后继元素

int PriorElem(SqList L,int b)
{
    if(b>1&&b<=L.length)//不是第一个元素
	{ 
    	int f=L.elem[b-2];
		return f;
	}
	else return ERROR;
} 
int NextElem(SqList L,int c)
{
	if(c<=L.length&&c>=1)
	{
		int f=L.elem[c];
		return f;
	}
	else return ERROR;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值