算法与数据结构——顺序表

顺序表的各种完整代码如下

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define TYPE int

// 设计顺序表结构:元素之间必须是连续的

typedef struct Order
{
	TYPE* ptr;
	int cal;
	int cnt;
}Order;

//创建顺序表

Order* create_order(int cal)
{
	// 给表结构分配内存
	Order* order = malloc(sizeof(Order));
	// 给元素分配内存
	order->ptr = malloc(sizeof(TYPE)*cal);
	// 记录表的容量
	order->cal = cal;
	// 初始化元素数量
	order->cnt = 0;
	return order;
}

// 销毁顺序表

void destroy_Order(Order* order)
{
	free(order->ptr);
	free(order);
}

// 清除表元素

void clear_order(Order* order)
{
	order->cnt = 0;
}

// 插入元素

bool insert_order(Order* order,int index,TYPE val)
{
	if(order->cnt>=order->cal||index>=order->cnt)
	return false;
	for(int i=order->cnt-1;i>=index;i--)
	{
		order->ptr[i+1]=order->ptr[i];
	}
	order->ptr[index] =val;
	order->cnt++;
	return true;
}

// 删除元素

bool delete_order(Order* order,int index)
{
	if(0>index||index>=order->cnt)
		return false;
	for(int i=index;i<order->cnt-1;i++)
	{
		order->ptr[i]=order->ptr[i+1];	
	}
	order->cnt--;
	return true;
}

// 添加元素

bool add_order(Order* order,TYPE val)
{
	// 判断表是否满
	if(order->cnt>=order->cal)
	return false;
	// 在末尾添加元素
	order->ptr[order->cnt++] = val;
	return true;
}

// 访问元素

bool access_order(Order* order,int index,TYPE* p)
{
	if(index>=order->cnt)
		return false;
	*p =order->ptr[index];
	return true;
}

// 修改元素

bool modify_order(Order* order,TYPE old,TYPE new)
{
	for(int i=0;i<order->cnt;i++)
	{
		if(order->ptr[i] == old)
		{
			order->ptr[i]=new;
			return true;
		}
	}
	return false;
}

// 查询元素

int query_order(Order* order,TYPE val)
{
	for(int i=0;i<order->cnt;i++)
	{
		if(order->ptr[i] == val)
		{
			return i;	
		}
	}
	return -1;
}

// 遍历顺序表

void show_order(Order* order)
{
	for(int i=0;i<order->cnt;i++)
	{
		printf("%d ",order->ptr[i]);
	}
	printf("\n");
}

// 排序顺序表

void sort_order(Order* order)
{
	for(int i=0;i<order->cnt-1;i++)
	{
		for(int j=i+1;j<order->cnt;j++)
		{
			if(order->ptr[i]>order->ptr[j])
			{
				TYPE temp = order->ptr[i];
				order->ptr[i] = order->ptr[j];
				order->ptr[j] = temp;
			}
		}
	}
}

主函数如下 实现各种功能

int main()
{
	Order* order = create_order(15);
	for(int i=0; i<10; i++)
	{
		add_order(order,rand()%100);
	}
	show_order(order);
	insert_order(order,0,10110);
	show_order(order);
	delete_order(order,5);
	show_order(order);
	int num = 0;
	access_order(order,3,&num) && printf("access:%d\n",num);
	modify_order(order,21,110);
	show_order(order);
	printf("%d\n",query_order(order,77));
	sort_order(order);
	show_order(order);
}

运行代码 结果如下
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值