文档章节

201SqList

把南墙撞开
 把南墙撞开
发布于 2016/05/06 23:51
字数 696
阅读 38
收藏 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
博文 73
码字总数 21068
作品 0
昌平

暂无文章

storm drpc实例

序 本文主要演示一下storm drpc实例 配置 version: '2'services: supervisor: image: storm container_name: supervisor command: storm supervisor -c storm.......

go4it
9分钟前
0
0
官宣 | Chrome 70正式向所有HTTP网站发出红色“不安全”警告!

10月17日,坐拥10亿用户的Chrome浏览器正式上线70版本。作为第一个采用TLS1.3正式版的Chrome版本,在安全新功能方面,Chrome 70进一步升级了HTTP页面“不安全”显示标识,即当用户输入数据时...

亚洲诚信
10分钟前
1
0
mysql 数据类型及占用字节数

数字类型 TINYINT                           1 字节 SMALLINT                          2 个字节 MEDIUMINT                         3 个字节...

会游泳的鱼_
今天
6
0
高性能mysql:创建高性能的索引

性能优化简介 MySQL性能定义为完成某件任务所需要的时间量度,换句话说,性能即响应时间,这是一个非常重要的原则。我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行SQL语...

背后的辛酸
今天
8
0
HTTP get、post 中请求json与map传参格式

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;im......

寒风中的独狼
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部