文档章节

204LinkList

把南墙撞开
 把南墙撞开
发布于 2016/05/11 09:41
字数 869
阅读 8
收藏 0

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

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

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

    c1.h 是预处理指令;

    elemtype.h  定义Elemtype数据类型;

    c2-2.h 是LinkList的数据结构;

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

    function.h 定义bo2-2.cpp中,链表遍历函数ListTraverse所需要的访问函数;

    main.cpp 是实现、测试函数。

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

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

typedef int Status;
//elemtype.h
typedef int ElemType;
//c2-2.h
#ifndef C2_2_H
#define C2_2_H

#include"elemtype.h"
struct LNode
{
	ElemType data;
	LNode *next;
};

typedef LNode* LinkList;

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

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

void InitList(LinkList &L)
{
	L = (LinkList)malloc(sizeof(LNode));
	if (!L)
		exit(OVERFLOW);
	L->next = nullptr;
}

void ListTraverse(LinkList L, void(*vi)(ElemType))
{
	int i = 0;
	if (L)
	{
		LinkList p = L->next;
		while (p)
		{
			vi(p->data);
			p = p->next;
			i++;
			if (!(i % 10))
				cout << endl;
		}
	}
}

Status ListInsert(LinkList &L, int index, ElemType e)
{
	int j = 0;
	LinkList p = L, s;

	while (p && j < index - 1)
	{
		p = p->next;
		j++;
	}

	if (!p || j > index - 1)
		return ERROR;

	if (!(s = (LinkList)malloc(sizeof(LNode))))
		exit(OVERFLOW);
	s->data = e;
	s->next = p->next;
	p->next = s;
	return OK;
}

Status ListDelete(LinkList &L, int index, ElemType &e)
{
	int j = 0;
	LinkList p = L, q;
	
	while (p->next && j < index - 1)
	{
		p = p->next;
		j++;
	}

	if (!p->next || j > index - 1 )
		return ERROR;

	q = p->next;
	p->next = q->next;
	e = q->data;
	free(q);
	q = nullptr;
	return OK;
}

bool ListEmpty(LinkList L)
{
	if (L->next)
		return false;
	else
		return true;
}

int ListLength(LinkList L)
{
	int i = 0;
	if (L)
	{
		LinkList p = L;
		while (p->next)
		{
			p = p->next;
			i++;
		}
		return i;
	}
	return i;
}

Status GetElem(LinkList L, int index, ElemType &e)
{
	if (index <= 0)
		return ERROR;
	int j = 0;
	LinkList p = L;
	while (p && j < index)
	{
		p = p->next;
		j++;
	}

	if (!p)
		return ERROR;
	e = p->data;
	return OK;
}

int LocateElem(LinkList L, ElemType e)
{
	int i = 0;
	if (L)
	{
		LinkList p = L;
		while (p->next)
		{
			i++;
			p = p->next;
			if (p->data == e)
				return i;
		}
	}	
	return i;
}

/*
//this function is not efficient
Status PriorElem(LinkList L, ElemType cur_e, ElemType &pre_e)
{
	int location = LocateElem(L, cur_e);
	if (location > 1)
	{
		GetElem(L, location - 1, pre_e);
		return OK;
	}
	else
		return ERROR;
}

Status NextElem(LinkList L, ElemType cur_e, ElemType &next_e)
{
	int location = LocateElem(L, cur_e);
	if (location >= 1 && location < ListLength(L))
	{
		GetElem(L, location + 1, next_e);
	return OK;
	}
	else
	return ERROR;
}
*/
Status PriorElem(LinkList L, ElemType cur_e, ElemType &pre_e)
{
	if (L)
	{
		LinkList p = L, q = L->next;
		if (!q)
			return ERROR;
		while (q->next)
		{
			p = p->next;
			q = q->next;
			if (q->data == cur_e)
			{
				pre_e = p->data;
				return OK;
			}
		}
		return ERROR;
	}
	return ERROR;
}

Status NextElem(LinkList L, ElemType cur_e, ElemType &next_e)
{
	if (L)
	{
		LinkList p = L;
		if (p->next == nullptr)
			return ERROR;
		while (p->next->next)
		{
			p = p->next;
			if (p->data == cur_e)
			{
				next_e = p->next->data;
				return OK;
			}
		}
	}
	return ERROR;
}

void ClearList(LinkList &L)
{
	if (L)
	{
		LinkList p, q;
		p = L->next;
		while (p)
		{
			q = p->next;
			free(p);
			p = q;
		}
		L->next = nullptr;
	}
}

void DestroyList(LinkList &L)
{
	LinkList q;
	while (L)
	{
		q = L->next;
		free(L);
		L = q;
	}
}
//function.h
#ifndef FUNCTION_CPP
#define FUNCTION_CPP

#include"c1.h"
#include"elemtype.h"
using namespace std;

void print(ElemType e)
{
	cout << e << " ";
}

#endif
//main.cpp
#include "c1.h"
#include "c2-2.h"
#include "function.h"
using namespace std;

int main()
{
	LinkList L;
	InitList(L);
	cout << "ListEmpty: " << ListEmpty(L) << endl;
	cout << "ListLength: " << ListLength(L) << endl;
	
	for (int i = 0; i < 100; i++)
		cout << ListInsert(L, i + 1, i);
	cout << endl;
	ListTraverse(L, print);
	cout << "ListEmpty: " << ListEmpty(L) << endl;
	cout << "ListLength: " << ListLength(L) << endl;
	cout << endl;

	ElemType e;
	ListDelete(L, 1, e);
	ListDelete(L, 97, e);
	ListTraverse(L, print);
	cout << endl;

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

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

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

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

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

	ClearList(L);
	DestroyList(L);

	cin.get();
	return 0;
}

 

© 著作权归作者所有

共有 人打赏支持
上一篇: 205LinkList
下一篇: 201SqList
把南墙撞开
粉丝 0
博文 73
码字总数 21068
作品 0
昌平
私信 提问

暂无文章

test

//// main.c// Test//// Created by 吕颖 on 2019/1/16.// Copyright © 2019年 carmen. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <t......

carmen-ly
今天
1
0
Android webview热门组件agentweb:4.0.2无法自适应的问题

Android webview热门组件agentweb:4.0.2无法自适应的问题 //设置自适应屏幕,两者合用mAgentWeb.getAgentWebSettings().getWebSettings().setUseWideViewPort(true); //将图片调整到适合w...

Gemini-Lin
今天
5
0
如何维护一个自己的 golang doc 服务

本文内容是如何维护一个golang 在线的doc 服务。 1 什么是godoc ? godoc 是 golang 官方提供的文档生成工具, 2 为什么要有godoc ? 我们经常遇到一个问题,就是代码和文档不一致,线上代码版...

鼎铭
今天
5
0
js中的对象创建的模式以及继承模式

对象创建模式: 工厂模式 构造函数模式 原型模式 继承模式 原型式继承 寄生式继承 构造函数 原型式和构造函数的组合式(缺点:运行两次超类类函数,积累函数的属性被挂载在原型对象上和实例对...

莫西摩西
昨天
3
0
大数据教程(11.5)仓库工具hive的实现机制

上一篇文章介绍了hadoop联邦集群的搭建过程。至此,hadoop的整个知识系统就差不多结束了。本篇博客开始,博主将分享数据仓库hive工具的原理以及使用。 一、Hive基本概念 (1)什么是Hive Hive...

em_aaron
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部