静态顺序表

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

#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__
时间: 2024-12-29 23:49:14

静态顺序表的相关文章

【C++】模版类实现普通类静态顺序表

在C或C++里,我们已经学会了如何实现一个静态顺序表了,那为何还要引入模版类来实现静态顺序表呢?首先,我们看,在未引入模版前,我们在C++里是这样定义一个静态顺序表的: typedef int DataType;    //此时我定义的是int型 class SeqList {     DataType* _array;     size_t _size;     size_t _capacity; } 我们若要定义char型或者其他类型的,可以采用typedef了,这就是使用typedef的优

c语言:【顺序表】静态顺序表的头插、头删

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<string.h> #define MAXSIZE 1000 typedef int DateType; typedef struct SeqList {     DateType arr[MAXSIZE];     size_t size; }SeqList;

静态顺序表和动态顺序表

实现一个静态顺序表,首先,要定义一个保存数据的数组,保存在结构体中,用size来存储数组中的元素个数, typedef struct SeqList { DataType array[MAX_SIZE]; size_t size; }SeqList; 首先来实现一下静态顺序表的初始化函数,可以借用系统的memset函数来实现,开辟一块空间全部初始化为0,没有存入数据所以size也为0 void InitSeqList(SeqList *pSeq) { assert(pSeq); memset(p

C++实现静态顺序表的增删查改以及初始化

C++实现静态顺序表的增删查改 顺序表:用一段地址连续的存储单元依s次存储数据元素的线性结构,是线性表的一种. //SeqList.h #pragma once #include <assert.h> #include <string.h> #define MAX_SIZE 5 typedef int DataType; //定义顺序表结构体 typedef struct SeqList { DataType array[MAX_SIZE];  //数据块数组 size_t siz

【C语言】静态顺序表和动态顺序表的实现

静态顺序表 定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识.只有定义了一个顺序表,才能利用该顺序表存放数据元素,也才能对该顺序表进行各种操作. 有两种定义顺序表的方法:一是静态地定义一张顺序表:二是动态地生成一张顺序表. 静态地定义一张顺序表的方法与定义一个数组的方法类似.可以描述如下: #define MAX_SIZE 100 typedef int DataType; typedef struct SeqList { DataType array[MAX_SIZE

C实现静态顺序表

#include <stdio.h> #include <assert.h> #include <string.h> //顺序表的静态存储 #define MAXSIZE 5 typedef int DataType; typedef struct SeqList {  DataType array[MAXSIZE]; //数组大小  size_t size;             //有效元素个数 }SeqList; void InitSeqList(SeqList

C实现的静态顺序表

             顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.线性表采用顺序存储的方式存储就称之为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中.      顺序表的存储特点是:只要确定了起始位置,表中任一元素地址都可以求出.        在c中实现顺序表时,由于函数较多,所以把函数的实现放在头文件中,在主函数中进行单元函数测试. SequenceList_Static.h #ifndef __SE

【C语言】静态顺序表的实现(包括头插、头删、尾插、尾删、查找、删除指定位置)

#define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> using namespace std; #include<assert.h> #define MAXSIZE 100 typedef int DataType; typedef struct SeqList {     DataType _array[MAXSIZE];     size_t _size; }SeqList; void InitSeqList(SeqList*

静态顺序表实现

SeqList.h文件    #pragma once #define MAX_SIZE 1000 typedef int DataType; typedef unsigned int size_t; typedef struct SeqList {  DataType array[MAX_SIZE];  size_t size; }SeqList;   void InitSeqList(SeqList* pSeq); void PushBack(SeqList* pSeq, DataType