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

line.h


typedef 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);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值