排序使用简单的插入排序实现:
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];
}
}
}
..................................................................................................................................................................................................
其他收集的小代码:
/* 1
1 1
1 2 1
1 3 3 1 一维数组二维数组是一个好算法 切记
1 4 6 4 1 打印杨辉三角算法
二维数组算法 记住这一题
*/
package day3;
public class Yanghuisanjiao {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final int MAX = 8;//经常出现的常数用名称标识
int mat[][] = new int[MAX][];
int i = 0, j, n;
n = MAX;
for (i = 0; i < n; i++) {
mat[i] = new int[i + 1];//对每个小数组实例化 ,规律:实例化个数 是下标+1
mat[i][0] = 1;
mat[i][i] = 1;
for (j = 1; j < i; j++)
mat[i][j] = mat[i - 1][j - 1] + mat[i - 1][j];//好算法 上面两个数加起来是下面一个数 怎么表示的 学习
}
for (i = 0; i < n; i++) {
for (j = n - i; j > 0; j--)
System.out.print(" ");
for (j = 0; j <= i; j++)
System.out.print(mat[i][j] + " ");
System.out.println();
}
}
}
分享到:
相关推荐
这篇博客“用数组实现线性表各种操作(C语言)完结”很可能是详细介绍了如何使用C语言中的数组来构建并操作线性表。 线性表的操作主要包括: 1. 初始化:创建一个空的线性表,通常是在数组中分配空间,并将其长度设...
这篇博客"用数组实现线性表的各种操作(C语言)只完成一部分功能,明日继续"可能探讨了如何使用C语言创建和操作线性表,但遗憾的是,由于描述为空,我们无法获取具体实现的细节。 不过,我们可以根据线性表的基本操作...
本文将深入探讨如何用C语言来实现线性表,并分析它们的优缺点。 1. **数组实现线性表** 数组是最直观的线性表实现方式,它通过预先分配连续的内存空间来存储元素。在C语言中,可以声明一个固定大小的数组来实现...
在这个实验代码中,我们关注的是使用C语言实现线性表,并采用数组作为底层存储机制。 线性表的基本操作包括: 1. 初始化:创建一个空的线性表,通常用一个空数组来表示。 2. 插入元素:在线性表的特定位置插入一个...
2. **C语言实现线性表的基本结构**:在C语言中,线性表通常用数组或链表来实现。数组实现的线性表在内存中连续存储,访问速度快但插入和删除操作可能涉及大量元素的移动;链表实现则通过指针链接元素,插入和删除...
在这个“线性表的合并/c语言”项目中,我们将探讨如何使用C语言来实现线性表的合并操作,特别是针对有序线性表的合并。此程序采用单链表作为线性表的实现方式,它是一种动态数据结构,允许在运行时添加或删除元素。 ...
下面我们将深入探讨如何用C语言来实现线性表,并结合描述和标签,分析相关知识点。 一、数组实现线性表 1. 定义结构体:首先,我们需要定义一个结构体,它包含元素值以及数组长度和实际元素数量。例如: ```c ...
本文将介绍如何使用C语言实现线性表的基本操作,包括初始化、插入、获取元素、遍历以及更新元素。 首先,线性表的实现通常采用链表或数组的形式。这里采用数组来存储线性表,因为数组具有随机访问的优势,且在某些...
1.代码相关CSDN博客文章:https://blog.csdn.net/u013025955/article/details/90644964 2.目录结构: code:源代码;project:VC 6.0工程
在C语言中实现线性表,通常会选择数组或链表作为底层数据结构,这两种方法各有优缺点。数组实现简单,访问速度快,但插入和删除操作可能涉及大量元素的移动;链表则提供了更灵活的动态扩展性,但在随机访问上不如...
本文将深入探讨如何用C语言实现线性表的各种操作,包括创建、插入、删除、查找等。 首先,链表由节点组成,每个节点包含两部分:数据域和指针域。数据域存储元素,指针域指向下一个节点。链表的头部通常通过一个头...
本文将通过分析一段C语言代码来深入理解如何使用顺序存储方式来实现线性表的基本操作,包括创建、插入、查找和删除等。 #### 二、代码解析 给定的代码实现了基于顺序存储的线性表的基本操作。下面对各个部分进行...
通过这份文档,学习者可以掌握如何使用C语言中结构体和数组来模拟线性表,并实现对数据的基本操作,同时了解如何设计和实现一个简单的通讯录管理系统。这对于加深对线性数据结构的理解,提高解决实际问题的能力,...
在C语言中,可以使用一维数组来实现线性表,方便地进行元素的插入、删除和查找操作。本项目中的学生成绩管理系统可能通过线性表存储学生的成绩数据。 3. **数组**: 数组是C语言中最基本的数据结构之一,它可以...
在C语言中,我们可以使用数组来实现线性表的顺序存储结构。本篇将详细探讨线性表顺序结构的C语言实现,并以Code::Blocks作为开发环境进行讲解。 1. **线性表的基本操作** - 插入元素:在线性表的指定位置插入一个...
本篇文章将深入探讨如何使用C语言来实现顺序线性表,包括其基本操作,如创建、插入数据、获取数据、删除数据、获取存放的数据量、清空线性表以及销毁线性表。 顺序线性表是由一组具有相同类型元素构成的序列,这些...
顺序队列可以用数组实现,但当队列满或空时可能会遇到问题,因此通常使用循环队列来解决这些问题。循环队列利用数组的循环特性,避免了队列满或空时需要重新分配内存的问题。链式队列则是用链表实现,插入和删除操作...
下面将详细介绍线性表的顺序存储以及如何用C语言实现相关操作。 1. **定义结构体**:首先,我们需要定义一个结构体,代表线性表的节点。这个结构体包含元素的类型和数组的大小。例如: ```c typedef struct { ...
压缩包中的"线性表函数"可能包含了上述各种操作的C语言实现,如初始化、插入、删除、查找和遍历等功能。通过阅读和理解这些函数,可以加深对线性表及其操作的理解,并为实际编程提供参考。 总之,线性表是数据结构...
在C语言中实现线性表,我们需要定义数据结构,如定义数组或链表节点,然后编写相应的操作函数。以下是一些常见的函数: - **初始化**:创建一个空的线性表,可以是空数组或空链表。 - **插入元素**:在线性表的指定...