重学数据结构 完整顺序表(工程文件)

来源:互联网 发布:gre数学难吗 知乎 编辑:程序博客网 时间:2024/05/16 19:03
line.htypedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int ElemType; typedef struct SqList {   ElemType *elem; // 存储空间基址   int length; // 当前长度   int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) }SqList;Status InitList(SqList &L);int ListLength(SqList L);Status ListInsert(SqList &L,int i,ElemType e);Status ListDelete(SqList &L,int i,ElemType &e);void ListPrint(SqList L);linec.cpp#include<malloc.h> // malloc()等#include <stdlib.h>#include <stdio.h>#include "line.h"#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量#define LISTINCREMENT 2 // 线性表存储空间的分配增量#define OK 1#define ERROR 0#define OVERFLOW -2 Status InitList(SqList &L) // 算法2.3 { // 操作结果:构造一个空的顺序线性表   L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));   if(!L.elem)     exit(OVERFLOW); // 存储分配失败   L.length=0; // 空表长度为0   L.listsize=LIST_INIT_SIZE; // 初始存储容量   return OK; } int ListLength(SqList L) { // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数   return L.length; } Status ListInsert(SqList &L,int i,ElemType e) // 算法2.4 { // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1   // 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1   ElemType *newbase,*q,*p;   if(i<1||i>L.length+1) // i值不合法     return ERROR;   if(L.length>=L.listsize) // 当前存储空间已满,增加分配   {     if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType))))       exit(OVERFLOW); // 存储分配失败     L.elem=newbase; // 新基址     L.listsize+=LISTINCREMENT; // 增加存储容量   }   q=L.elem+i-1; // q为插入位置   for(p=L.elem+L.length-1;p>=q;--p) // 插入位置及之后的元素右移     *(p+1)=*p;   *q=e; // 插入e   ++L.length; // 表长增1   return OK; } Status ListDelete(SqList &L,int i,ElemType &e) // 算法2.5 { // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)   // 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1   ElemType *p,*q;   if(i<1||i>L.length) // i值不合法     return ERROR;   p=L.elem+i-1; // p为被删除元素的位置   e=*p; // 被删除元素的值赋给e   q=L.elem+L.length-1; // 表尾元素的位置   for(++p;p<=q;++p) // 被删除元素之后的元素左移     *(p-1)=*p;   L.length--; // 表长减1   return OK; }void ListPrint(SqList L){ElemType *p;printf("线性表中的元素为:\n");for(p=L.elem;p<L.elem+L.length;p++){ printf("%d  ",*p);} }linemain.cpp#include <stdio.h>#include "line.h"void main(){ SqList L;int i,j;ElemType e; InitList(L); printf("请输入5个数据元素:\n"); for(i=1;i<=5;i++){ scanf("%d",&e); ListInsert(L,i,e); }ListPrint(L);printf("\n请输入删除元素所在位置:\n"); scanf("%d",&j);ListDelete(L,j,e);printf("被删除的元素为:");printf("%d\n",e);ListPrint(L);}

原创粉丝点击