线性表操作用c语言实现,用数组实现线性表各种操作(C语言)

排序使用简单的插入排序实现:

void one_sort(int *sqList,int val,int len)

{

int pos=len;

int temp=val;

while(val0)

{

sqList[pos]=sqList[pos-1];

pos--;

}

sqList[pos]=temp;

}

//直接插入排序实现

void straisort(struct Arr * pArr)

{

for(int i=1;icnt;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(val0)

{

sqList[pos]=sqList[pos-1];

pos--;

}

sqList[pos]=temp;

}

//直接插入排序实现

void straisort(int *arr,int len)

{

int i;

for(i=1;i

线性表的操作数组实现代码如下,当然功能并不全面,等待以后收集:

/*

线性结构数组的实现

*/

#include #include //包含了malloc函数

#include //包含了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;icnt;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->cntlen&&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(val0)

{

sqList[pos]=sqList[pos-1];

pos--;

}

sqList[pos]=temp;

}

//直接插入排序实现

void straisort(struct Arr * pArr)

{

for(int i=1;icnt;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; icnt; 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;icnt;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();

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值