顺序表的各种完整代码如下
#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);
}
运行代码 结果如下