博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性表(顺序表的创建)
阅读量:4976 次
发布时间:2019-06-12

本文共 3182 字,大约阅读时间需要 10 分钟。

// orderList.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include "stdlib.h"
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
#define OK 1;
#define ERROR 0;

typedef struct {

int *elem; //存储空间基指
int length; //当前长度
int listsize;//当前分配的存储容量
}Sqlist;

typedef int Status;

void main()
{

//初始化线性表

Status InitList(Sqlist &L);
//销毁线性表
Status DestroyList(Sqlist &L);
//清空线性表
Status ClearList(Sqlist &L);
//判断线性表是否为空
Status ListEmpty(Sqlist L);
//获取线性表的长度
Status ListLength(Sqlist L);
//获取某个元素
Status GetElem(Sqlist L,int i,int &e);
//返回当前元素的下标
Status LocateElem(Sqlist L,int e,int &index);

//获取当前元素的前驱

Status PriorElem(Sqlist L,int cur_e,int &pre__e);

//获取当前元素的后继

Status NextElem(Sqlist L, int cur_e, int &next_e);

//在第i个元素插入元素

Status ListInsert(Sqlist &L, int i, int e);

//删除第i个元素并将元素保存在del_e中

Status ListDelete(Sqlist &L,int i,int &del_e);
//访问顺序表的每个元素
Status ListTraverse(Sqlist L);

Sqlist L;

InitList(L);

ListInsert(L,1,2);
ListInsert(L,2,3);
ListInsert(L,1,1);
//输出顺序链表中的所有值
for ( int i = 0; i < L.length; i++)
{
printf("元素的第%d值为%d\n",i+1,L.elem[i]);

}

int del_e=0;

ListDelete(L, 3,del_e);

printf("删除的元素为%d\n",del_e);

printf("输出删除后的线性表\n");

//输出顺序链表中的所有值

for (int i = 0; i < L.length; i++)
{
printf("元素的第%d值为%d\n", i + 1, L.elem[i]);

}

}

//初始化顺序线性表

Status InitList(Sqlist &L) {
L.elem = (int *)malloc(sizeof(int)*LIST_INIT_SIZE);
if (L.elem == NULL) {
exit(EOVERFLOW);
}
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}

//在下标为i的地址插入元素
Status ListInsert(Sqlist &L, int i,int e) {
if (i<1 || i>L.length+1) {
return ERROR;
}

if (L.length >= L.listsize) {

//重新分配内存
L.elem = (int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
};
for (int j = L.length-1; j >=(i-1); j--)
{
L.elem[j + 1] = L.elem[j];

}

L.elem[i-1] = e;

L.length++;

return OK;

}

//删除第i个元素并将元素保存在del_e中

Status ListDelete(Sqlist &L, int i, int &del_e) {
if (i<1 || i>L.length) {
return ERROR;
}

//保留删除的元素
del_e = L.elem[i-1];
for (int j = i-1; j<L.length; j++)
{
L.elem[j] = L.elem[j+1];

}

L.length--;

}

//销毁顺序表

Status DestroyList(Sqlist &L) {
if (L.elem != NULL) {
free(L.elem);
return OK;
}
return ERROR;
}

//清空顺序表

Status ClearList(Sqlist &L) {

L.length = 0;

return OK;

}

//判断顺序表是否为空

Status ListEmpty(Sqlist L) {

if (L.length < 1) {

return OK;
}
return ERROR;

}

//返回顺序表的长度

Status ListLength(Sqlist L) {

return L.length;

}

//返回线性表的第I个元素

Status GetElem(Sqlist L,int i,int &e){

if (i<1 && i>L.length) {

return ERROR;

}
e = L.elem[i-1];
}

//返回当第一个元素的下标

Status LocateElem(Sqlist L, int e, int &index) {
for (int i = 0; i < L.length; i++)
{
if (e == L.elem[i]) {
index = i;
return OK;
}

}

return ERROR;

}

//获取当前元素的前驱
Status PriorElem(Sqlist L, int cur_e, int &pre__e) {
for (int i = 0; i < L.length; i++)
{
if (cur_e == L.elem[i]&&i!=0) {
pre__e = L.elem[i-1];
return OK;
}

}

return ERROR;

}

//获取当前元素的后继
Status NextElem(Sqlist L, int cur_e, int &next_e) {

for (int i = 0; i < L.length; i++)

{
if (cur_e == L.elem[i] && i < L.length) {
next_e = L.elem[i+1];
return OK;
}

}

return ERROR;

}

//访问线性表中的所有元素
Status ListTraverse(Sqlist L) {

for (int i = 0; i < L.length; i++)

{
if (L.elem[i] == NULL) {

return ERROR;

}

}

return OK;

}

 

转载于:https://www.cnblogs.com/paulversion/p/7511865.html

你可能感兴趣的文章
Learning Cocos2d-x for WP8(4)——中文显示
查看>>
【AnjularJS系列5】scopes、module、controller
查看>>
QT5的QDesktopSerivices不同
查看>>
alembic 实践操作
查看>>
【数据库】:关于DB2数据库错误提示说明
查看>>
C基础-标准C语言头文件
查看>>
BZOJ4590: [Shoi2015]自动刷题机
查看>>
java 删除文件目录
查看>>
免安装mysql配置
查看>>
Tomcat安装和常见问题
查看>>
Linux进程管理
查看>>
并查集详细讲解(数据结构篇)
查看>>
php程序员应具有的7种能力
查看>>
CSS3 GRID LAYOUT
查看>>
自动刷新session
查看>>
git 命令
查看>>
【python小练】0005
查看>>
2016012102 小学四则运算练习软件项目报告
查看>>
Struts2下载
查看>>
Java面试题
查看>>