C语言代码:线性表的定义与操作--顺序表

课程来源于浙江大学MOOC《数据结构与算法》

typedef int Position;
typedef struct LNode *List;
struct LNode {
	ElementType Data[MAXSIZE];
	Position Last;
};

/* 初始化 */
List MakeEmpty()
{
	List L;
	
	L = (List)malloc(sizeof(struct Lnode));
	L->Last = -1;
	
	return L;
 } 
 
 /* 查找 */
#define ERROR -1

Position Find( List L, ElementType X )
{
	Position i = 0;
	
	while( i <= L->Last && L->Data[i] != X) 
	{
		i++;
	}
	if( i > L->Last)  return ERROR;/*如果没找到,返回错误信息*/ 
	else return i; /*找到后返回的是储存位置*/ 
}

/* 插入 */
/* 注意:在插入位置参数P上与课程视频有所不同,课程视频i是序列位序(从1开始);这里P是储存下表位置(从0开始);两者差1 */ 
bool Insert( List L, ElementType X, Position P )
{
	Position i;
	
	if( L->Last == MAXSIZE-1 ){
		/* 表空间已满,不能插入 */ 
		printf("表满");
		return false;
	}
	if( P < 0 || P > L->Last+1 ) { /*检查位置的合法性 */ 
		printf("位置不合法");
		return false;
	}
	for( i = L->Last; i >= P; i-- ) {
		L->Data[i+1] = L->Data[i];/* 将位置P及以后的元素顺序向后移动 */
		L->Data[P] = X;           /* 新元素插入 */
		L->Last++; 				  /* Last仍指向最后元素 */
		return true;
	}
}

/* 删除 */
/*注意:在删除位置参数P上与课程视频有所不同,课程视频中i是序列位序(从1开始),这里P是存储下标位置(从0开始),两者差1*/
bool Delete( List l, Position P )
{ /* 从L中删除指定位置P的元素 */
	Position i;
	
	if( p < 0 || p > L->Last) {  /* 检查空表及删除位置的合法性 */
		printf("位置%d不存在元素", P);
		return false;
	}
	for( i = P+1; i <= L->Last; i++) {
		L->Date[i-1] = L->Date[i];  /* 将位置P+1及以后的元素顺序向前移动 */
		L->Last--;					/* Last仍指向最后元素 */
		return true;
	}
}

你可能感兴趣的:(数据结构与算法)