C语言 建立简单顺序表

#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define TYPE int 
//设计数据结构

typedef struct Array
{
	TYPE* base; //数组首地址
	size_t size;//元素的个数
}Array;

//创建
Array* create_array(size_t len);
//销毁
void destory_array(Array* arr);
//访问
TYPE* access_array(Array* arr,int index);
//查找
int find_array(Array* arr,TYPE data);
//排序
void sort_array(Array* arr);
//遍历
void show_array(Array* arr);
//删除
bool delete_array(Array* arr,int index);
//插入
bool insert_array(Array* arr,int index,int data);

//-------------------以上为函数声明----------------
int main()//main函数用于测试函数是否正确
{
	Array* arr=create_array(20);
	for(int i=0;i<10;i++)
	{
		
		TYPE* p = access_array(arr,i);
		if(NULL!=p)
		*access_array(arr,i)=rand()%100;
	}	
	show_array(arr);
//	sort_array(arr);
	delete_array(arr,1);
	show_array(arr);
//	int num ;
//	scanf("%d",&num);
//	printf("%d\n",find_array(arr,num)+1);
//	destory_array(arr);
}

//---------------以下为实现函数--------------------
//创建
Array* create_array(size_t len)
{
	Array* arr = malloc(sizeof(Array));
	arr->base = malloc(sizeof(TYPE)*len);
	arr->size = len;
	return arr;
}


//销毁
void destory_array(Array* arr)
{
	free(arr->base);
	free(arr);
}

//访问
TYPE* access_array(Array* arr,int index)
{
	if(index<0 || index>=arr->size) return NULL;
	return arr ->base+index;
}

//查找
int find_array(Array* arr,TYPE data)
{
	for(int i=0;i<arr->size;i++)
	{
		if(data == arr->base[i])
			return i;
	}
	return -1;

}

//排序
void sort_array(Array* arr)
{
	for(int i=0;i<arr->size;i++)
	{	
		for(int j =i+1;j<arr->size;j++)
		{
		if(arr->base[j] < arr->base[i])
		{
			int temp = arr->base[i];
			arr->base[i] = arr->base[j];
			arr->base[j]=temp;
	 	}
		}
			
	}
	}


//遍历
void show_array(Array* arr)
{
	for(int i=0;i<arr->size;i++)
	{
		printf("%d ",arr->base[i]);
	}
printf("\n");
}


//删除
bool delete_array(Array* arr,int index)
{
	if(index < 0 ||index > arr->size)
		return false;
	
	for(int i=index;i<arr->size-1;i++)
	{
		arr->base[i] =arr->base[i+1];
	}
	return true;
}


//插入=====================================
bool insert_array(Array* arr,int index,int data)
{

	if(index < 0 ||index > arr->size)
		return false;
	
	for(int i=arr->size-1;i>index;i--)
	{
		arr->base[i] =arr->base[i+1];
	}
	arr->base[index]=data;
	return true;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用模板方式实现顺序的合并 #include "stdafx.h" #include #define MaxSize 100 template class SeqList { private: T * Mylist; int ListMaxSize; int Length; public: SeqList(int ListMaxSize=MaxSize); //构造函数 ~SeqList(void);// 析构函数 bool SLIsEmpty(void); // 判断是否为空 bool SLIsFull(void);//判断是否满 int ListLength(void){return Length;}//求长度 T SLGetElem(int i); // 取得第i个元素的值 int SLFind(T & x,int index); //查找值为x的结点 bool SLInsert(int i,T & x); // 在的第i个位置插入新结点 bool SLDelete(int i); // 删除的第i个位置的结点 void CreateList(int num);// 创建一个包含num个元素的顺序 void SLPrint(); //输出全体元素 }; template SeqList ::SeqList(int listMaxSize) //初始化顺序 { if(listMaxSize>0){ ListMaxSize=listMaxSize; Length=0; Mylist=new T [ListMaxSize]; // 创建连续的空间 } } template SeqList ::~SeqList(void) { delete [] Mylist;//删除,释放空间 } template void SeqList ::CreateList(int num) { T x; Length=0; cout << "请输入"<<num<<"个整数数据元素以创建一个线性"<<endl; for (int i=0;i>x; Mylist[i]=x; Length++; } } template bool SeqList ::SLIsEmpty(void) // 判断是否为空 { return (Length<=0)?true:false; //空则返回真(true),否则返回假(false) } template bool SeqList ::SLIsFull(void)//判断是否满 { return(Length>=ListMaxSize)?true:false; //满则返回真(true),否则返回假(false) } template T SeqList ::SLGetElem(int i) // 取得第i个元素的值 { return(iLength-1)?-1:Mylist[i]; } template int SeqList ::SLFind(T & x,int index) //查找值为x的结点 { for(int i=0;i<index;i++) if(Mylist[i]==x) return i+1; return -1;//没有找到给定元素 } template bool SeqList ::SLInsert(int i,T & x) // 在的第i个位置插入新结点 { if(iLength) {cout <<"参数i不合理!" <<endl; return false;} else if(Length==ListMaxSize) {cout<< "已满,无法插入!"<i;j--) Mylist[j]=Mylist[j-1]; Mylist[j]=x; Length++; return true; } } template <clas

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值