首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

算法与数据结构-兑现线性表的删除操作-算法2.4

2012-09-24 
算法与数据结构--实现线性表的删除操作--算法2.4/* (程序头部注释开始) * 程序的版权和版本声明部分 * Cop

算法与数据结构--实现线性表的删除操作--算法2.4

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:实现线性表的插入和删除操作 * 作 者: 雷恒鑫 * 完成日期: 2012 年 09 月 16 日 * 版 本 号: V1.0 * 对任务及求解方法的描述部分 * 输入描述: * 问题描述: * 程序输出: * 程序头部的注释结束 */#include <iostream>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){//构造一个空的线性表LL.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));if(!L.elem)exit(1);//存储分配失败L.length = 0;//空表长度为0L.listsize = LIST_INIT_SIZE;//初始存储容量return true;}Status ListInsert_Sq(SqList &L,int i,ElemType e){//在顺序线性表L中第i个位置之前插入新的元素e//i的合法值为1<=i<=ListLength_Sq(L)+1if(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;//表长增1return true;}Status ListDelete_Sq(SqList &L,int i){//在顺序线性表L中删除第i个元素,并用e返回其值//i的合法值为 1<= i<=ListLength_Sq(L)if((i<1)||(i>L.length))return false;//i值不合法ElemType *p = &(L.elem[i-1]);//p为被删除元素的位置ElemType e = *p;//被删除元素的值赋值给eElemType *q = L.elem + L.length-1;//表尾元素的位置for(++p;p<=q;++p)*(p-1) = *p;//被删除元素之后的元素左移--L.length;//表长减1return e;}void main(){SqList L;InitList_Sq(L);ListInsert_Sq(L,1,2);ElemType e = ListDelete_Sq(L,1);cout<<e<<endl;system("PAUSE");return;}


 

运行结果:

算法与数据结构-兑现线性表的删除操作-算法2.4

热点排行