文档章节

201SqList

把南墙撞开
 把南墙撞开
发布于 2016/05/06 23:51
字数 696
阅读 37
收藏 0
点赞 2
评论 0

注意:要严格按照后缀名新建文件。

如果按.h创建文件,后来简单重命名为.cpp文件,编译会出错。

顺序表的实现 包含4个文件:

    c1.h 是预处理指令;

    c2-1.h 是SqList的数据结构;

    bo2-1.cpp 是SqList的基本操作函数(basic operations 缩写为 bo);

    main2-1.cpp 是测试函数。

//c1.h
#include<iostream>
#include<process.h>
#include<malloc.h>

#define OK 1
#define ERROR 0
#define INFEASIBLE -1

typedef int Status;
//c2-1.h
#ifndef C2_1_H
#define C2_1_H

typedef int ElemType;
#define INIT_SIZE 10
#define INCREMENT 2
struct SqList
{
	ElemType *elem;
	int length;
	int listsize;
};

void InitList(SqList &L);
int ListLength(SqList L);
Status ListEmpty(SqList L);
void ListTraverse(SqList L);
Status ListInsert(SqList &L, int index, ElemType e);
Status ListDelete(SqList &L, int index, ElemType &e);
void ClearList(SqList &L);
Status GetElem(SqList L, int index, ElemType &e);
int LocateElem(SqList L, ElemType e);
Status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e);
Status NextElem(SqList L, ElemType cur_e, ElemType &next_e);
void DestroyList(SqList &L);

#endif
//bo2-1.cpp
#include "c1.h"
#include "c2-1.h"
using namespace std;

void InitList(SqList &L)
{
	if (!(L.elem = (ElemType *)malloc(INIT_SIZE*sizeof(ElemType))))
		exit(OVERFLOW);
	L.length = 0;
	L.listsize = INIT_SIZE;
}

int ListLength(SqList L)
{
	return L.length;
}

Status ListEmpty(SqList L)
{
	if (L.length == 0)
		return OK;
	else
		return ERROR;
}

void ListTraverse(SqList L)
{
	for (int i = 0; i < L.length; i++)
	{
		if (i % 10 == 0 && i != 0)
			cout << endl;
		cout << L.elem[i] << "   ";
	}
	cout << endl;
}

Status ListInsert(SqList &L, int index, ElemType e)
{
	
	if (index >= 1 && index <= L.length + 1)
	{
		if (L.listsize == L.length)
		{
			if (!(L.elem = (ElemType *)realloc(L.elem, (L.length + INCREMENT)*sizeof(ElemType))))
				exit(OVERFLOW);
			L.listsize = L.length + INCREMENT;
		}
		
		//insert by index
		/*
		if (index == L.length + 1)
		{
			L.elem[index - 1] = e;
		}
		else
		{
			for (int i = L.length - 1; i >= index - 1; i--)
			{
				L.elem[i + 1] = L.elem[i];
			}
			L.elem[index - 1] = e;
		}
		*/

		//insert by pointer
		ElemType *p, *q;
		p = L.elem + index - 1;
		for (q = L.elem + L.length - 1; q >= p; q--)
			*(q + 1) = *q;
		*p = e;		
		L.length++;
		return OK;
	}
	else
		return ERROR;
}

Status ListDelete(SqList &L, int index, ElemType &e)
{
	if (index >= 1 && index <= L.length)
	{
		ElemType *p, *q;
		p = L.elem + index - 1;
		e = *p;
		q = L.elem + L.length - 1;
		while (p < q)
		{
			*p = *(p + 1);
			p++;
		}	
		L.length--;
		return OK;
	}
	else
		return ERROR;
}

void ClearList(SqList &L)
{
	L.length = 0;
}

Status GetElem(SqList L, int index, ElemType &e)
{
	if (index < 1 || index > L.length)
		return ERROR;
	e = *(L.elem + index - 1);
	return OK;
}

int LocateElem(SqList L, ElemType e)
{
	if (L.length == 0)
		return 0;
	else
	{
		for (int i = 0; i < L.length; i++)
		{
			if (e == *(L.elem + i))
				return i + 1;
		}
		return 0;
	}	
}

Status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e)
{
	int location = LocateElem(L, cur_e);
	if (location == -1 || location == 1)
		return ERROR;
	pre_e = *(L.elem + location - 2);
	return OK;
}

Status NextElem(SqList L, ElemType cur_e, ElemType &next_e)
{
	int location = LocateElem(L, cur_e);
	if (location == -1 || location == L.length)
		return ERROR;
	next_e = *(L.elem + location);
	return OK;
}

void DestroyList(SqList &L)
{
	free(L.elem);
	L.elem = nullptr;
	L.length = 0;
	L.listsize = 0;
}
//main2-1.cpp
#include "c1.h"
#include "c2-1.h"
using namespace std;
int main()
{
	SqList L;
	InitList(L);

	cout << "ListLength: " << ListLength(L) << endl;

	cout << "ListEmpty: " << ListEmpty(L) << endl;

	for (int i = 1; i <= 100; i++)
		ListInsert(L, i, i);
	cout << "ListLength: " << ListLength(L) << endl;
	ListTraverse(L);

	ElemType e;
	ListDelete(L, 1, e);
	cout << "ListLength: " << ListLength(L) << endl;
	ListTraverse(L);
	cout << "deleted element: " << e << endl;

	GetElem(L, 33, e);
	cout << "GetElem: " << e << endl;

	cout << "LocateElem: " << LocateElem(L, 2) << endl;

	PriorElem(L, 67, e);
	cout << "PriorElem: " << e << endl;

	NextElem(L, 67, e);
	cout << "NextElem: " << e << endl;

	ClearList(L);
	ListTraverse(L);
	cout << "ListLength: " << ListLength(L) << endl;

	DestroyList(L);
	cout << "ListLength: " << ListLength(L) << endl;
	cout << "ListSize: " << L.listsize << endl;

	cin.get();
	return 0;
}


© 著作权归作者所有

共有 人打赏支持
把南墙撞开
粉丝 0
博文 67
码字总数 20424
作品 0
昌平

暂无相关文章

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 25分钟前 ⋅ 0

python3中报错的解决方法(长期更新)

1、ImportError: No module named ‘DjangoUeditor’ 出错原因:安装DjangoUeditor库适用于python2,需要下载适用python3的 下载地址:https://github.com/twz915/DjangoUeditor3 2、python3......

xiaoge2016 ⋅ 30分钟前 ⋅ 0

数据结构与算法之双向链表

一、双向链表 1.双向链表的结点结构 typedef struct DualNode{ ElemType data; struct DualNode *prior; // 前驱结点 struct DualNode *next; // 后继结点}DualNode, *DuL...

aibinxiao ⋅ 50分钟前 ⋅ 0

五大最核心的大数据技术

大数据技术有5个核心部分,数据采集、数据存储、数据清洗、数据挖掘、数据可视化。关于这5个部分,有哪些核心技术?这些技术有哪些潜在价值?看完今天的文章就知道了。 大数据学习群:7165810...

董黎明 ⋅ 51分钟前 ⋅ 0

PhpStorm 头部注释、类注释和函数注释的设置

首先,PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes下设置即可,其中方法的默认是这样的: /**${PARAM_DOC}#if (${TYPE_HINT} != "v...

nsns ⋅ 51分钟前 ⋅ 0

spring.net AOP

http://www.springframework.net/doc-latest/reference/html/aop-quickstart.html https://www.cnblogs.com/wujy/archive/2013/04/06/3003120.html...

whoisliang ⋅ 56分钟前 ⋅ 0

【HAVENT原创】创建 Dockerfile 生成新的镜像,并发布到 DockerHub

注意:Win7 与 Win10 的版本存在差异,Win7 版本使用 Docker Quickstart Terminal 进入控制台,Win10下面直接用管理员权限打开控制台或者 PowerShell 即可;另外 Win7 下面只能访问 C盘,/ap...

HAVENT ⋅ 56分钟前 ⋅ 0

pom.xml出现web.xml is missing ...解决方案

提示信息应该能看懂。也就是缺少了web.xml文件,<failOnMissingWebXml>被设置成true了。 搜索了一下,Stack Overflow上的答案解决了问题,分享一下。 目前被顶次数最多的回答原文如下: This...

源哥L ⋅ 57分钟前 ⋅ 0

js时间戳与日期格式之间相互转换

1. 将时间戳转换成日期格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 简单的一句代码 var date = new Date(时间戳); //获取一个时间对象 /** 1. 下面是获取时间日期的方法,需要什么样的格式自己...

Jack088 ⋅ 今天 ⋅ 0

web添加log4j

添加xml配置log4j.properties # Global logging configuration---root日志设置#log4j.rootLogger=info,dailyRollingFile,stdoutlog4j.rootLogger=debug,stdout,dailyRollingFile---......

黄柳淞 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部