排序使用简单的插入排序实现:
void one_sort(int *sqList,int val,int len)
{
int pos=len;
int temp=val;
while(val<sqList[pos-1]&&pos>0)
{
sqList[pos]=sqList[pos-1];
pos--;
}
sqList[pos]=temp;
}
//直接插入排序实现
void straisort(struct Arr * pArr)
{
for(int i=1;i<pArr->cnt;i++)
{
one_sort(pArr->pBase,pArr->pBase[i],i);//调用单步排序
}
}
直接插入排序通用算法:
void one_sort(int *sqList,int val,int len)
{
int pos=len;
int temp=val;
while(val<sqList[pos-1]&&pos>0)
{
sqList[pos]=sqList[pos-1];
pos--;
}
sqList[pos]=temp;
}
//直接插入排序实现
void straisort(int *arr,int len)
{
int i;
for(i=1;i<len;i++)
{
one_sort(arr,arr[i],i);//调用直接插入排序
}
}
线性表的操作数组实现代码如下,当然功能并不全面,等待以后收集
/*
线性结构数组的实现
*/
#include <stdio.h>
#include <malloc.h> //包含了malloc函数
#include <stdlib.h> //包含了exit函数
//首先定义描述数组信息的结构体类型
struct Arr
{
int * pBase;//存放数组首地址的指针变量
int len;//数组长度
int cnt;//数组中元素的个数
};
//定义数组的基本操作的函数声明
void init_arr(struct Arr * pArr,int length);//数组初始化
bool append_arr(struct Arr * pArr,int val);//追加元素
bool insert_arr(struct Arr * pArr,int index ,int val);//插入元素
bool delete_arr(struct Arr * pArr, int pos, int * pVal);//删除元素
int get(struct Arr *pArr,int index); //得到元素
bool is_empty(struct Arr * pArr);//判断是否为空
bool is_full(struct Arr * pArr);//判断是否已满
void show_arr(struct Arr * pArr);//遍历数组
void inversion_arr(struct Arr * pArr);//数组倒置
void one_sort(int *sqList,int val,int len);//单步排序声明
void straisort(struct Arr * pArr);//直接插入排序声明
int main(void)
{
struct Arr arr;
init_arr(&arr,6);//初始化函数测试
//show_arr(&arr);
append_arr(&arr,3);
append_arr(&arr,2);
append_arr(&arr,9);
insert_arr(&arr,2,7);
show_arr(&arr);
return 0;
}
//初始化数组的函数实现 pArr是结构体变量arr的指针
void init_arr(struct Arr * pArr,int length)
{
pArr->pBase=(int *)malloc(sizeof(int)*length);//malloc()函数头文件声明
if(NULL==pArr->pBase)
{
printf("动态内存分配失败!\n");
exit(-1);//要在头文件声明
}
else
{
pArr->len=length;
pArr->cnt=0;
}
}
//遍历数组函数实现
void show_arr(struct Arr * pArr)
{
if(is_empty(pArr))
{
printf("数组为空\n");
}
else
{
for(int i=0;i<pArr->cnt;i++)
{
printf("%d",pArr->pBase[i]);
}
}
}
//判断数组是否为空
bool is_empty(struct Arr * pArr)
{
if(pArr->cnt==0)
return true;
else
return false;
}
//数组追加元素
bool append_arr(struct Arr * pArr,int val)
{
if(pArr->cnt < pArr->len)
{
pArr->pBase[pArr->cnt]=val;
(pArr->cnt)++;
return true;
}
else
printf("数组已满\n");
return false;
}
//插入元素
bool insert_arr(struct Arr * pArr,int index ,int val)
{
if(pArr->cnt<pArr->len&&index<=pArr->cnt)
{
for(int i=pArr->cnt-1;i>=index-1;i--)
{
pArr->pBase[i+1]=pArr->pBase[i];
}
pArr->pBase[index-1]=val;
(pArr->cnt)++;
return true;
}
else
{
printf("插入失败\n");
return false;
}
}
//单步直接插入排序实现
void one_sort(int *sqList,int val,int len)
{
int pos=len;
int temp=val;
while(val<sqList[pos-1]&&pos>0)
{
sqList[pos]=sqList[pos-1];
pos--;
}
sqList[pos]=temp;
}
//直接插入排序实现
void straisort(struct Arr * pArr)
{
for(int i=1;i<pArr->cnt;i++)
{
one_sort(pArr->pBase,pArr->pBase[i],i);//调用单步排序
}
}
//数组倒置
void inversion_arr(struct Arr * pArr )
{
int i = 0;
int j = pArr->cnt-1;//首尾下标的呼应关系
int t;
while (i < j)
{
t = pArr->pBase[i];
pArr->pBase[i] = pArr->pBase[j];
pArr->pBase[j] = t;
i++;
j--;
}
return;
}
//删除元素
bool delete_arr(struct Arr * pArr, int pos, int * pVal)
{
int i;
if ( is_empty(pArr) )
return false;
if (pos<1 || pos>pArr->cnt)
return false;
*pVal = pArr->pBase[pos-1];
for (i=pos; i<pArr->cnt; i++)
{
pArr->pBase[i-1] = pArr->pBase[i];
}
pArr->cnt--;
return true;
}
//判断是否已满
bool is_full(struct Arr * pArr)
{
if (pArr->cnt == pArr->len)
return true;
else
return false;
}
//查找元素
int get(struct Arr *pArr,int index)
{
for(int i=0;i<pArr->cnt;i++)
{
if(index==i)
{
return pArr->pBase[i];
}
}
}
分享到:
相关推荐
NULL 博文链接:https://linuxdev.iteye.com/blog/1136754
数据结构 线性表 实验代码 C语言 数组 支持大部分线性表操作,hust 赵明 虽是菜鸟,努力坚持学习
1.代码相关CSDN博客文章:https://blog.csdn.net/u013025955/article/details/90644964 2.目录结构: code:源代码;project:VC 6.0工程
代码实现了线性表的基本操作,包括初始化、插入、删除、查找和打印。每个操作都经过了注释说明。代码展示了如何使用数组实现线性表,并提供了基本的增删查操作。
两个程序都是学生成绩管理系统 一个为简易的,只有添加成绩和排序输出功能,另一个添加、删除、修改、排序、文件存取等功能
线性表的顺序表示以及实现(C语言编写),有完整的注释。
数据结构中,顺序表的各种基本运算,元素的增删改查等操作。其中,用C语言的一维数组实现线性表的顺序存储。
线性表的顺序存储是指用一段连续的存储空间存储线性表中的元素,用数组来实现。在顺序存储结构中,线性表中相邻的元素在物理位置上也是相邻的。具体来说,线性表中的每个元素都存储在一个固定的数组下标位置上,数组...
线性表按照存储方式进行分类有两种,分为顺序存储和链式存储,代码实现了线性表的顺序存储方式,按照数组方式进行实现的,也可自行定义分配一段连续的空间来实现顺序线性表存储方式,由于C语言中提供的数组可以达到...
本文实例讲述了C语言实现在数组A上有序合并数组B的方法,分享给大家供大家参考。具体分析如下: 题目:数组A和数组B均有序,数组A有足够大内存来容纳数组B,将数组B有序合并到数组A中 分析:如果由前至后合并,...
C语言实现基本的链表式和循环数组的线性表
数据结构课件 线性表 单链表 栈和队列 串 数组和广义表 树和二叉树 C语言版 有大量程序代码
顺序存储结构的线性表C语言源码,线性表的顺序存储结构是指用一段地址连续的存储单元(就是数组)依次存储线性表的数据元素
Apriori算法 C语言实现 线性表结构加数组
c语言数组指定位置插入和删除-玩转C语言链表,单链表双向链表的建立遍历插入删除... 数组和链表.pdf
第2章至第7章从抽象数据类型的角度,分别讨论线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用;第8章综合介绍操作系统和编译程序中涉及的动态存储管理的基本技术;第9章至第11章...
1.数据结构结构体数组的定义 2.线性表数组的应用(非普通数组) 3.实现建立,插入,查找,删除,打印的基本功能
求链式线性表的倒数第K项,给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。
基于数组的线性表,只有一些基础方法,C语言