我的Bit路-C语言实现顺序

原创 2015年11月21日 20:12:48

C语言实现顺序表储存

文件SeqList.cpp
<span style="font-size:14px;">#pragma warning(disable: 4715)

#include"SeqList.h"
void ShowSeqList(SeqList *pSeq)
{
	assert(pSeq);
	printf("size = %d \n",pSeq->size);
	for(size_t i = 0; i < pSeq->size;i++)
	{
		printf("%d ", pSeq->array[i]);
	}
	printf("\n");
}

void InitSeqList(SeqList *pSeq)
{
	assert(pSeq);
	memset(pSeq->array,0,sizeof(ElemType)*MAX_SIZE);
	pSeq->size = 0;
}

void PushBack(SeqList *pSeq,const ElemType &x)
{
	assert(pSeq);
	if(pSeq->size >= MAX_SIZE)
	{
		printf("SeqList is Full\n");
		return;
	}
	pSeq->array[pSeq->size++] = x;
}

void PopBack(SeqList *pSeq)
{
	assert(pSeq);
	if(pSeq->size <= 0)
	{
		printf("SeqList is Empty\n");
		return;
	}
	pSeq->array[--pSeq->size] = 0;
}

void PushFront(SeqList *pSeq,const ElemType &x)
{
	size_t begin = pSeq->size;
	assert(pSeq);
	if(pSeq->size >=MAX_SIZE)
	{
		printf("SeqList is Full\n");
		return;
	}
	for(;begin > 0; --begin)
	{
		pSeq->array[begin] = pSeq->array[begin-1];
	}
	pSeq->array[0] = x;
	pSeq->size++;
}
void PopFront(SeqList *pSeq)
{
	size_t begin = 0;
	assert(pSeq);
	if(pSeq->size <= 0)
	{
		printf("SeqList is Empty\n");
		return;
	}
	for(;begin < pSeq->size-1; ++begin)
	{
		pSeq->array[begin] = pSeq->array[begin+1];
	}
	pSeq->array[--pSeq->size] = 0;
}

void Erase(SeqList *pSeq, size_t pos)
{
	assert(pSeq);
	if(pos > pSeq->size)
	{
		printf("Position Error\n");
		return;
	}
	size_t begin = pos;
	for(; begin < pSeq->size -1;++ begin)
	{
		pSeq->array[begin] = pSeq->array[begin+1];	
	}
	pSeq->array[--pSeq->size] = 0;
}

void Remove(SeqList *pSeq, const ElemType &x)
{
	size_t begin = 0;
	assert(pSeq);
	for(; begin < pSeq->size; ++begin)
	{
		if(x == pSeq->array[begin])
		{
			Erase(pSeq,begin);
			return;
		}
	}
	printf("No this elemData\n");
}

void RemoveAll(SeqList *pSeq, const ElemType &x)
{
	
	size_t begin = 0;
	assert(pSeq);
	for(; begin < pSeq->size; ++begin)
	{
		if(x == pSeq->array[begin])
		{
			Erase(pSeq,begin);
		}
	}
}

//////////冒泡排序
void  BubbSort(SeqList *s)
{
	for(size_t i = 0; i < s->size-1;++i)
	{
		for(size_t j = 0; j < s->size-1-i; ++j)
		{
			if(s->array[j] > s->array[j+1])
			{
				ElemType tmp = s->array[j];
				s->array[j] = s->array[j+1];
				s->array[j+1] = tmp;
			}
		}
	}
}
</span>
文件SeqList.h
//顺序表简单实现

#ifndef _SEQLIST_H
#define _SEQLIST_H

#include<stdio.h>
#include<string.h> //for memcpy
#include<assert.h>	//for assert
#include<malloc.h>	//for malloc

#define MAX_SIZE 100

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

void ShowSeqList(SeqList *pSeq);
void InitSeqList(SeqList *pSeq);
void PushBack(SeqList *pSeq,const ElemType &x);
void PopBack(SeqList *pSeq);
void PushFront(SeqList *pSeq,const ElemType &x);
void PopFront(SeqList *pSeq);
void Erase(SeqList *pSeq, size_t pos);
void Remove(SeqList *pSeq, const ElemType &x);
void RemoveAll(SeqList *pSeq, const ElemType &x);

测试文件
#pragma once
#include<stdio.h>
#include "SeqList.h"
//顺序表示例
void TestForSeqList()
{
	SeqList Seq;
	InitSeqList(&Seq);
	PushBack(&Seq,2);
	PopBack(&Seq);
	PushBack(&Seq,6);
	PushFront(&Seq,4);
	PushFront(&Seq,4);
	PushBack(&Seq,2);

	Erase(&Seq,44);
	Remove(&Seq,44);

	ShowSeqList(&Seq);
	PushBack(&Seq,5);
	PushBack(&Seq,7);
	PushBack(&Seq,2);
	ShowSeqList(&Seq);
	BubbSort(&Seq);
	ShowSeqList(&Seq);
}

以上是本人勉力实现的顺序表储存,欢迎各位大神指正,如有问题请留言。谢谢







            
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

JAVA实现类似C语言联合体般 充分使用bit位存储数据的方法之一

对接中我遇到的第一个问题就是数据封装和解析都是按bit位算的,一个数据占多少个bit这样的。现在遇到的问题就比如说,现在用两个byte来存CTRL,三个bit用来存版本号,一个bit用来做判断是否需要...

c语言实现bit反转的最佳算法-从msb-lsb到lsb-msb

问题 实现如下转换的最佳算法是什么? 0010 0000 => 0000 0100 具体的转换是从MSB->LSB到LSB->MSB, 所有的Bit都必须反转,那意味着,这并不是字节顺序的交换。 最...

C语言实现 一个数二进制位模式从左到右翻转 reverse_bit

首先要知道这个数的二进制转化,要实现从左到右的翻转,要么让二进制数从后往前移位,要么就是从后往前读每一位都乘以2^(32-i),最后相加就行了。 举例说明吧: 如在32位机器上15这个值包含下列各...

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3….an)链式...

顺序表的实现,C语言

C语言 用顺序表实现电话本的功能

简介: 用顺序表实现电话本的功能(C语言) 电话本具有如下4个功能: 1.创建一个电话本,电话本里面包含名字和电话号码 2.在指定位置插入一个名字和电话号码 3.在指定位置删除一个名字和电话号码...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)