线性表 C语言实现

Linear_list.h

#ifndef   LINEAR_LIST_H
#define  LINEAR_LIST_H 
#include"Status.h"
#define  LIST_INIT_SIZE 100
#define LIST_INCREAMENT  10

typedef  int ElemType;


typedef  struct SqList
{
	ElemType  *elem;
	int length;
	int list_size;

	
}SqList,*Ptr;

//线性表的顺序存储

typedef  Ptr  SqListPtr;
 

 Status List_Init(SqListPtr  L);         //初始化线性表


 Status  List_Retrival(SqListPtr L, int pos, ElemType* elem);

 Status  List_Locate(SqListPtr L, ElemType  elem, int* pos);


 Status  List_Insert(SqListPtr L, ElemType elem, int pos);


 Status List_Delete(SqListPtr L,  int pos);




#endif

linear_list.cpp

#include "Linear_list.h"
#include"Linear_list.h"


//初始化线性表
Status List_Init(SqListPtr  L) {

	Status  S = S_SUCCESS;
	L->list_size = LIST_INIT_SIZE;
	L->length = 0;

	L->elem = (ElemType*)malloc(sizeof(ElemType) * L->list_size);
	if (L->elem == NULL)
	{
		return S_FAIL;
	}
	return S;
}

Status List_Retrival(SqListPtr L, int pos, ElemType* elem)
{
	Status  S = RANGE_ERROR;
	if (L)
	{
		if ((pos - 1) >= 0 && (pos - 1) < L->length)
		{
			*elem = L->elem[pos - 1];
			S = S_SUCCESS;
		}
	}
	else
	{
		S = S_FAIL
	}

	return S;

}

Status List_Locate(SqListPtr L, ElemType elem, int* pos)
{
	Status  S = RANGE_ERROR;

	if (L)
	{
		for (int i = 0; i < L->length; ++i)
		{
			if (L->elem[i] == elem)
			{
				*pos = i + 1;
				S = S_SUCCESS;
				break;
			}
		}
	}
	else
	{
		S = S_FAIL;
	}
	return S;
}

Status List_Insert(SqListPtr L, ElemType elem, int pos)
{

	Status  S = RANGE_ERROR;
	if ((pos-1)>0&&(pos-1)<L->length)
	{
		if (L&&L->length<L->list_size)
		{
			for (int i=L->length-1,i>=pos-1;--i)
			{
				L->elem[i + 1] = L->elem[i];
			}
			L->elem[pos - 1] = elem;
			L->length++;
			S = S_SUCCESS;
		}
	}
	else
	{
		S = S_FAIL;
	}

	return S;
}

Status List_Delete(SqListPtr L, int pos)
{
	Status  S = RANGE_ERROR;
	if ((pos-1)>0&&(pos-1)<L->length)
	{
		if (L&&L->length<L->list_size)
		{
			for (int i=pos-1;i<L->length;i++)
			{
				L->elem[i] = L->elem[i + 1];
			}
			L->length--;
			S = S_SUCCESS;
		}
	}
	else
	{
		S = S_FAIL;
	}
	return S;
}

List_node.h

#ifndef  LIST_NODE_H
#define   LIST_NODE_H
#include "Status.h"
typedef  ElemType  int;
typedef struct Node
{

	ElemType   elem;
	struct  Node* next;

}Node,*Ptr;
typedef  Ptr* SqListPtr;

Status  List_Retrieve(SqListPtr L, int pos, ElemType* elem);    //查找

Status  List_Locate(SqListPtr L,ElemType elem,int *pos);   //按值查找

Status  List_Insert(SqListPtr L, ElemType elem, int pos);

Status  List_Retrival(SqListPtr L, int pos, ElemType* elem);


Status List_Delete(SqListPtr L,  int pos);


#endif

List_node.cpp

#include "List_node.h"


Status List_Retrieve(SqListPtr L, int pos, ElemType* elem)
{
	Status  S = RANGE_ERROR;
	Ptr  p=(*L)->next;
	int i=1;
	while (p&&i<pos)
	{
		i++;
		p=p->next;
	}
	if (p&&i==pos)
	{
		*elem=p->elem;
		S=S_SUCCESS;
		/* code */
	}
	return S;
}
Status  List_Locate(SqListPtr L,ElemType elem,int *pos)   //°´Öµ²éÕÒ
{

	Status  S = S_FAIL;
	Ptr  p=(*L)->next;
		int i=1;
		while (p)
		{
			if (p->elem==elem)
			{
				
				*pos=i;
				S=S_SUCCESS;
				break;
			}
			i++;
			p=p->next;
		}
	return S;
}


 Status  List_Insert(SqListPtr L, ElemType elem, int pos)
 {
	
	Status  S=RANGE_ERROR;
	Ptr   pHead=(*L);
	Ptr  pTemp;
	int i=1;
	while (pHead!=nullptr&&i<pos)
	{
		i++;
		pHead=pHead->next;
	}
	if (i==pos)
	{
		pTemp=pHead->next;
		if (pTemp)
		{
			Ptr  pElem=(Ptr)malloc(sizeof(Ptr));
			pHead->next=pElem;
			pElem->next=pTemp->next;
			S=S_SUCCESS;
		}
		else
			S=S_FAIL;
	}

	return  S;

 }


 Status List_Delete(SqListPtr L,  int pos)
 {
	Status  S=RANGE_ERROR;
	Ptr   pHead=(*L);
	Ptr  pTemp;
	int i=1;
	while (pHead!=nullptr&&i<pos)
	{
		i++;
		pHead=pHead->next;
	}
	if (i==pos)
	{
		pTemp=pHead->next;
		if (pTemp)
		{
			pHead->next=pTemp->next;
			delete  pTemp;
			S=S_SUCCESS;
		}
		else
			S=S_FAIL;
	}
	return S;
 }



Status  List_Retrival(SqListPtr L, int pos, ElemType* elem)
{
	Status  S=RANGE_ERROR;
	Ptr   pHead=(*L);
	int i=1;
	while (pHead!=nullptr&&i<pos)
	{
		i++;
		pHead=pHead->next;
	}
	if (i==pos)
	{
		*elem=pHead->elem;
		S=S_SUCCESS;
	}
	return  S;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值