您的位置:首页 > 理论基础 > 数据结构算法

数据结构一一线性表的顺序存储结构之插入操作

2017-12-25 10:27 507 查看
线性表的顺序存储的结构体定义为:

#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int ElemType;   /* ElemType类型根据实际情况而定,这里假设为int */

typedef struct
{
ElemType data[MAXSIZE]; /* 数组,存储数据元素 */
int length;             /* 线性表当前长度 */
}SqList;


描述顺序存储结构需要三个属性:
存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
线性表的最大存储容量:数组长度MaxSize。
线性表的当前长度:length。
#include <iostream>
#include <time.h>
using namespace std;

#define MAX_SIZE 20
#define OK		1
#define ERROR	0

typedef int ElemType;

typedef struct
{
ElemType iData[MAX_SIZE];
int iLength;
}SqList;

//顺序表初始化
int InitList(SqList* L)
{
L->iLength = 0;
return OK;
}

//顺序表建立
SqList CreateList(SqList L)
{
int i = 0;
srand((unsigned)time(NULL));
for (i=0; i<10; i++)
{
L.iData[i] = rand()%100;
L.iLength++;
}
return L;
}

int visit(ElemType c)
{
printf("%d ",c);
return OK;
}

int PrintList(SqList L)
{
for (int i=0;i<L.iLength;i++)
{
visit(L.iData[i]);
}
printf("\n");
return OK;
}
/************************************************************************
插入步骤:
1.如果插入位置不合理,抛出异常;
2.如果线性表长度大于等于数组长度,则抛出异常或动态增加容量;
3.从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
4.将要插入元素填入位置i处;
5.表长加1。
/************************************************************************/
int ListInsert(SqList* L,int i,ElemType e)
{
if (i<0 || i>L->iLength+1) /*插入位置不合理*/
{
printf("插入位置不合理\n");
return ERROR;
}
if (L->iLength>=MAX_SIZE) /*线性表长度大于数组长度*/
{
printf("线性表长度大于数组长度\n");
return ERROR;
}
if (i<=L->iLength) /*若插入位置不在表尾*/
{
for (int k=L->iLength;k>=i;k--) /*从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置*/
{
L->iData[k] = L->iData[k-1];
}
}
L->iData[i-1] = e; /*将要插入的元素填入位置i处*/
L->iLength++; /*表长加1*/
return OK;
}

int main()
{
SqList L;
InitList(&L);
int value=0,pos = 0;
printf("初始化成功,L.length=%d\n",L.iLength);
printf("\n1.遍历线性表 \n2.线性表赋值 \n3.线性表插入 \n0.退出 \n请选择你的操作:\n");
char opp = '0';
while (opp != '\0')
{
scanf("%c",&opp);
switch(opp)
{
case '1':
PrintList(L);
printf("\n");
break;
case '2':
L = CreateList(L);
printf("CreateList\n");
PrintList(L);
printf("\n");
break;
case '3':
printf("请输入插入元素位置:");
scanf("%d",&pos);
printf("请输入插入元素的值:");
scanf("%d",&value);
ListInsert(&L,pos,value);
printf("插入完毕,现在线性表为:\n");
PrintList(L);
printf("\n");
break;
}
}

return OK;
}
初始化成功,L.length=0

1.遍历线性表
2.线性表赋值
3.线性表插入
0.退出
请选择你的操作:
2
CreateList
21 28 22 47 53 64 77 16 6 27

3
请输入插入元素位置:3
请输入插入元素的值:233
插入完毕,现在线性表为:
21 28 233 22 47 53 64 77 16 6 27
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: