SeqList.

#pragma once
#define __SEQ_LIST__
#ifdef __SEQ_LIST__

#include <stdio.h>
#include <assert.h>
#include <string.h>

#define MAX_SIZE 100
typedef int DataType;

typedef struct SeqList
{
	DataType array[MAX_SIZE];
	size_t size;
}SeqList;

//typedef struct SeqList SeqList;
void InitSeqList(SeqList* pSeq);
void PrintSeqList(SeqList* pSeq);

void PushBack(SeqList* pSeq, DataType x);
void PopBack(SeqList* pSeq);

void PushFront(SeqList* pSeq, DataType x);
void PopFront(SeqList* pSeq);

void Insert(SeqList* pSeq, size_t index, DataType x);
void Modified(SeqList* pSeq, size_t index, DataType x);
void removed(SeqList* pSeq, size_t index);

#endif // __SEQ_LIST__

#include "SeqList.h"

//初始化数组为0
void InitSeqList(SeqList* pSeq)
{
	assert(pSeq);
	memset(pSeq->array, 0, MAX_SIZE*sizeof(DataType));
	pSeq->size = 0;
}

//打印数组
void PrintSeqList(SeqList* pSeq)
{
	size_t i = 0;
	assert(pSeq);

	for (; i < pSeq->size; ++i)
	{
		printf("%d ", pSeq->array[i]);
	}
	printf("\n");
}

//从数组的后边插入数
void PushBack(SeqList* pSeq, DataType x)
{
	assert(pSeq != NULL);

	if (pSeq->size > MAX_SIZE - 1)
	{
		printf("SeqList Is Full\n");
		return;
	}

	pSeq->array[(pSeq->size)++] = x;
}

//从数组的后边删除数
void PopBack(SeqList* pSeq)
{
	assert(pSeq);

	if (pSeq->size < 1)
	{
		printf("SeqList Is Empty\n");
		return;
	}

	//pSeq->array[--(pSeq->size)] = 0;
	--pSeq->size;
}

//从数组的前边插入数
void PushFront(SeqList* pSeq, DataType x)
{
	assert(pSeq);
	int i;
	for (i = pSeq->size; i>0; i--)
	{
		pSeq->array[i] = pSeq->array[i - 1];
	}
	pSeq->array[0] = x;
	pSeq->size++;
}

//从数组的前边删除数
void PopFront(SeqList* pSeq)
{
	assert(pSeq);
	size_t i;
	if (pSeq->size > 0)
	{
		for (i = 0; i < pSeq->size; i++)
		{
			pSeq->array[i] = pSeq->array[i + 1];
		}
		pSeq->size--;
	}
	else
		printf("SeqList Is Empty!");
}

// 插入x到index位置
void Insert(SeqList* pSeq, size_t index, DataType x)
{
	assert(pSeq);
	assert(index<=pSeq->size);
	size_t i;
	for (i = pSeq->size; i>index; i--)
	{
		pSeq->array[i] = pSeq->array[i - 1];
	}
	pSeq->array[index] = x;
	pSeq->size++;
}

//改变index处的数为x
void Modified(SeqList* pSeq, size_t index, DataType x)
{
	assert(pSeq);
	assert(index < pSeq->size);
	pSeq->array[index] = x;
}

//删除index处的数
void removed(SeqList* pSeq, size_t index)
{
	assert(pSeq);
	assert(index < pSeq->size);
	size_t i;
	for (i = index; i < pSeq->size; i++)
	{
		pSeq->array[i] = pSeq->array[i + 1];
	}
	pSeq->size--;
}

#include "SeqList.h"

// InitSeqList
// PushBack
// PopFront
// PopFront
// PopBack
void Test1()
{
	SeqList s;
	InitSeqList(&s);
	PushBack(&s, 1);
	PushBack(&s, 2);
	PushBack(&s, 3);
	PushBack(&s, 4);
	PrintSeqList(&s);

	//PushFront(&s, 99);
	//PrintSeqList(&s);

	PopFront(&s);
	PrintSeqList(&s);

	//PopBack(&s);
	//PopBack(&s);
	//PrintSeqList(&s);
}

// PushFront
// PopFront
void Test2()
{
	SeqList s;
	InitSeqList(&s);
	//PushFront(&s, 1);
	//PushFront(&s, 2);
	//PushFront(&s, 3);
	//PushFront(&s, 4);
	//PrintSeqList(&s);

	//PopFront(&s);
	//PopFront(&s);
	//PopFront(&s);
	PrintSeqList(&s);
}

// Insert
// Modified
// removed
void Test3()
{
	SeqList s;
	InitSeqList(&s);
	Insert(&s, 0, 0);
	Insert(&s, 1, 1);
	Insert(&s, 2, 2);
	Insert(&s, 3, 3);
	PrintSeqList(&s);

	Insert(&s, 1, 10);
	PrintSeqList(&s);

	Modified(&s, 1, 99);
	PrintSeqList(&s);

	removed(&s, 2);
	PrintSeqList(&s);

}

int main()
{
	//Test1();
	//Test2();
	Test3();
	return 0;
}

时间: 2024-10-26 03:38:36

SeqList.的相关文章

顺序表(SeqList)

---恢复内容开始--- 数据结构在上周结课,接下来就是为期几周的上机实验,说是实验课我感觉还不如不上.几乎每个人都是按着老师的要求把书上的代码打一遍,变都不变.一遍以后连自己打的什么都不知道. 与其说是实验课,我感觉不如叫它打字练习课. 老师做的并没错,错的是学生对于这节课的态度,老师已经把该讲的讲过了,而上机就是学生们自己领悟的过程,对于代码不能打一遍就是一遍过去了.要在打的过程中了解你所打的每一句 代码是干什么的.在函数中起到的是什么作用,而这个函数在整个程序中起到的又是什么作用.所以我写

数据结构C#版笔记--顺序表(SeqList)

线性结构(Linear Stucture)是数据结构(Data Structure)中最基本的结构,其特征用图形表示如下: 即:每个元素前面有且只有一个元素(称为"前驱"),同样后面有且只有一个元素(称为"后继")--注:起始元素的前驱认为是空,末尾元素的后继认为也是空,这样在概念上就不冲突了. 线性表(List)是线性结构的一种典型实现,它又可以分为:顺序表(SeqList)和链表(LinkList)二大类. 顺序表(SeqList)的基本特征为:元素在内部存储时

【数据结构】顺序表seqlist

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct seqlistNode { int date; }seqlistNode; typedef struct SEQLIST { unsigned int lengh; //长度 unsigned int count; //已存元素长度 seqlistNode * date; //数据域 }seqlist; seqlist *

seqlist c实现

顺序表,其实很多地方同数组很有相似,可以说数组也是一种顺序表. 对顺序表的基本操作有,初始化,插入元素,删除元素,访问表,元素定位,制空表,删除顺序表. 发一段功能集成代码. --------------------------------    end      ----------------------------------- 函数的源代码如下:------------------------------------------------------------------------

数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树

[本文谢绝转载,原文来自http://990487026.blog.51cto.com] 树 数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树 二叉树的创建,关系建立 二叉树的创建,关系建立2 三叉链表法 双亲链表: 二叉树的遍历 遍历的分析PPT 计算二叉树中叶子节点的数目:使用全局变量计数器 计算二叉树中叶子节点的数目:不使用全局变量计数器 无论是先序遍历,中序遍历,后序遍历,求叶子的数字都不变;因为本质都是一样的,任何一个节点都会遍历3趟 求二叉树的高度 二叉树的拷

排序算法大荟萃——冒泡排序算法

1.基本思想:将无序数组R[1...n]垂直排列,从下往上扫描数组R,对比相邻的两个元素,如果上面的元素值小于下面的值,则调整这两个相邻元素的位置,然后继续向上扫描,直到排好序为止. 2.排序过程: (1)初始化:读取无序数组R[1...n] (2)第一趟扫描:从数组R底部开始向上扫描,依次比较相邻的两个元素,若发现数值较小的在上面,则交换两个元素的位置.即依次比较(R[n].R[n-1]).(R[n-1].R[n-2]).....(R[2].R[1]),对于每对元素(R[j].R[j+1]),

线性表---顺序表

线性结构的特点是:在非空的有限集合中,只有唯一的第一个元素和唯一的最后一个元素.第一个元素没有直接前驱元素,最后一个没有直接的后继元素.其它元素都有唯一的前驱元素和唯一的后继元素. 线性表是一种最简单的线性结构.线性表可以用顺序存储结构和链式存储结构存储,可以在线性表的任意位置进行插入和输出操作. 要想将线性表在计算机上实现,必须把其逻辑结构转化为计算机可识别的存储结构.线性表的存储结构主要有两种:顺序存储结构和链式存储结构. 线性表的顺序表示与实现 线性表的顺序存储结构 线性表的顺序存储结构指

类型萃取

类型萃取是实现不同类型数据面对同一函数实现不同的操作,它与类封装的区别是:并不用知道所调用的对象是什么类型,类型萃取是编译后知道类型,先实现:而类的封装则是先定义类型,后实现方法. 类型分为基本类型(POD),和自定义类型. 在这里用模板的特化实现其编程思想: 以memcpy为例,当拷贝的是基本类型(POD)时,只用拷贝所传递指针上的数据,如果是string类型,则需要在堆上开辟空间,所传递的指针如果被直接复制,则有可能(vs下的string类型的实现原理是若字符串不长则以数组保存,若字符串过长

模板实现顺序表

类模板的成员函数: 类模板的成员函数本身是一个普通函数.但是,类模板的每个实例都有其自己版本的成员函数.因此,类模板的成员函数具有和模板相同的模板参数.因此,在=定义在类模板之外的成员函数就必须以template开始,后跟类模板参数列表. 类模板中的友元函数: 类模板中的友元函数,应该在类中定义.若只在类中声明,在类外定义,则在链接时会出现错误. 类模板实现顺序表: "SeqList.h" //冒泡法 "test.cpp"