算法与数据结构--实现线性表的插入操作--算法2.3

/* (程序头部注释开始)
 * 程序的版权和版本声明部分
 * Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
 * 文件名称:实现线性表的插入操作
 
* 作 者: 雷恒鑫 
* 完成日期: 2012 年 09 月 16 日
 * 版 本 号: V1.0 
* 对任务及求解方法的描述部分
 * 输入描述:
 * 问题描述:
 * 程序输出:
 
* 程序头部的注释结束
 
*/



#include 

using namespace std;

#define LIST_INIT_SIZE    100	//线性表存储空间的初始分配量

#define LISTINCREMENT   10	//线性表存储空间的分配增量

typedef int ElemType;      //定义别名

typedef int Status;      //定义别名

typedef struct{
	ElemType *elem;		//存储空间基址
	int length;		//当前长度
	int listsize;		//当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;


Status InitList_Sq(SqList &L){
	//构造一个空的线性表L
	L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if(!L.elem)
		exit(1);		//存储分配失败
	L.length = 0;		//空表长度为0
	L.listsize = LIST_INIT_SIZE;		//初始存储容量
	return true;
}

Status ListInsert_Sq(SqList &L,int i,ElemType e)
{
	//在顺序线性表L中第i个位置之前插入新的元素e
	//i的合法值为1<=i<=ListLength_Sq(L)+1
	if(i <1 || i> L.length + 1)
		return false;	//i值不合法
	if(L.length >= L.listsize)	//当前存储空间已满,增加分配
	{
		ElemType *newbase = (ElemType *)realloc(L.elem,(L.listsize + LISTINCREMENT )* sizeof(ElemType));
		if(!newbase)
			exit(1);	//存储分配失败
		L.elem = newbase;//新基址
		L.listsize += LISTINCREMENT;	//增加存储容量
	}

	ElemType *q = &(L.elem[i-1]);//q为插入位置

	for(ElemType *p = &(L.elem[L.length-1]);p>=q;--p)
		*(p+1) = *p;	//插入位置及之后的元素右移

	*q = e;		//插入e
	++L.length;		//表长增1
	return true;
}

void main()
{
	SqList L;
	InitList_Sq(L);
	ListInsert_Sq(L,1,2);
	return;
}


 

感言:写完2.3这个程序,我对算法2.3掌握的更熟了。

 

你可能感兴趣的:(算法与数据结构,C++语言学习)