码迷,mamicode.com
首页 > 其他好文 > 详细

静态顺序表

时间:2016-01-17 21:51:49      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:数据结构 顺序表

静态顺序表

实现尾部插入、尾部删除、头部插入、头部删除、任意位置插入、任意位置删除、排序、查找、反转等功能

#ifndef __SEQ_TABLE_S_H__
#define __SEQ_TABLE_S_H__
#define MAX 100


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


typedef int DataType;

//创建结构体类型对象
typedef struct SeqList
{
	DataType arr[MAX];
	int size ;
}SeqList,*pSeqList;

void InitSeqList(pSeqList pSeq);//初始化
void PrintSeqList(SeqList Seq);//打印

void PushBack(pSeqList pSeq,DataType x);//尾插
void PopBack(pSeqList pSeq);//尾删
void PushFront(pSeqList pSeq, DataType x);//头插
void PopFront(pSeqList pSeq);//头删

void Insert(pSeqList pSeq, int pos, DataType x);//插入元素
void Remove(pSeqList pSeq, DataType x);//删除元素
void RemoveAll(pSeqList pSeq, DataType x);//删除所有指定元素
int Find(SeqList Seq,DataType x);//遍历查找
void ReverseList(pSeqList pSeq);//反转
void SortList(pSeqList pSeq);//排序
int BinarySearch(SeqList Seq,DataType x);//二分查找


void InitSeqList(pSeqList pSeq)
{
	assert(pSeq);
	memset(pSeq->arr, 0, sizeof(pSeq->arr));//设置为全零
	pSeq->size = 0;
}

void PrintSeqList(SeqList Seq)
{
	int i = 0;
	for (i = 0; i < Seq.size; i++)
	{
		printf("%d ", Seq.arr[i]);

	}
	printf("over\n");
}

void PushBack(pSeqList pSeq, DataType x)//尾插
{
	assert(pSeq);
	if (pSeq->size >= MAX)
	{
		printf("顺序表已满\n");
		return;
	}
//	pSeq->arr[pSeq->size] = x;
//	pSeq->size++;
	pSeq->arr[pSeq->size++]=x;
}

void PopBack(pSeqList pSeq)//尾删
{
	assert(pSeq);
	if (pSeq->size == 0)
	{
		printf("顺序表已空\n");
		return;
	}
	pSeq->size--;
}

void PushFront(pSeqList pSeq, DataType x)//头插
{
	assert(pSeq);
	int i = 0;
	if (pSeq->size >= MAX)
	{
		printf("顺序表已满\n");
		return;
	}
	for (i = pSeq->size; i > 0; i--)
	{
		pSeq->arr[i] = pSeq->arr[i - 1];
	}
	pSeq->arr[0] = x;
	pSeq->size++;
}

void PopFront(pSeqList pSeq)//头删
{
	assert(pSeq);
	int i = 0;
	if (pSeq->size == 0)
	{
		printf("顺序表已空\n");
		return;
	}
	for (i = 0; i < pSeq->size; i++)
	{
		pSeq->arr[i] = pSeq->arr[i + 1];
	}
	pSeq->size--;
}

void Insert(pSeqList pSeq, int pos, DataType x)//插入元素
{
	int i = 0;
	assert(pSeq);
	assert((pos < pSeq->size) && (pos >= 0));

	if (pSeq->size == MAX)
	{
		printf("顺序表已满\n");
		return;
	}
	for (i = pSeq->size; i>pos; i--)
	{
		pSeq->arr[i] = pSeq->arr[i - 1];
	}
	pSeq->arr[pos] = x;
	pSeq->size++;
}
int Find(SeqList Seq, DataType x)
{
	int i = 0;
	for (i = 0; i < Seq.size; i++)
	{
		if (x == Seq.arr[i])
		{
			return i;
		}
	}
	return -1;
}

void Remove(pSeqList pSeq, DataType x)//删除元素

{
	int pos = Find(*pSeq, x);
	int i = 0;
	assert(pSeq);
	if (pos != -1)
	{
		for (i = pos; i < pSeq->size; i++)
		{
			pSeq->arr[i] = pSeq ->arr[i + 1];
		}
		pSeq->size--;
	}
}

void RemoveAll(pSeqList pSeq, DataType x)//删除所有指定元素
{
	while (Find(*pSeq, x) != -1)
	{
		Remove(pSeq, x);
	}
}
void ReverseList(pSeqList pSeq)//反转
{
	int start = 0;
	int end = pSeq->size - 1;
	assert(pSeq);
	while (start < end)
	{
		DataType tmp = pSeq->arr[start];
		pSeq->arr[start] = pSeq->arr[end];
		pSeq->arr[end] = tmp;
		start++;
		end--;
	}
}
void SortList(pSeqList pSeq)//排序
{
	assert(pSeq);
	int i = 0;
	int j = 0;

	for (i = 0; i < pSeq->size-1; i++)
	{
		for (j = 0; j < pSeq->size - i - 1; j++)
		{
			if (pSeq->arr[j]>pSeq->arr[j + 1])
			{
				DataType tmp = pSeq->arr[j];
				pSeq->arr[j] = pSeq->arr[j + 1];
				pSeq->arr[j + 1] = tmp;
			}
		
		}
	}
}
int BinarySearch(SeqList Seq, DataType x)//二分查找
{
	int left = 0;
	int right = Seq.size - 1;
	while (left <= right)
	{
		int mid = left - ((left - right) >> 1);
		if (Seq.arr[mid] > x)
			right = mid - 1;
		else if (Seq.arr[mid] == x)
			return mid;
		else
			left = mid + 1;

	}
	return -1;
}

#endif//__SEQ_TABLE_S_H__


本文出自 “无以伦比的暖阳” 博客,请务必保留此出处http://10797127.blog.51cto.com/10787127/1735822

静态顺序表

标签:数据结构 顺序表

原文地址:http://10797127.blog.51cto.com/10787127/1735822

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!