数据结构算法——顺序表
来源:互联网 发布:2017淘宝规则变更 编辑:程序博客网 时间:2024/04/29 09:17
今天看了贺利坚老师的一篇关于数据结构中顺序表的基本操作,看明白了,于是手痒想按照自己的思路写写,其中有不少错误,记个笔记。
代码如下:
头文件:list.h
#ifndef LIST_H#define LIST_H#define MAXSIZE 50//顺序链表结构体typedef struct{ int data[MAXSIZE];//链表元素 int length;//长度}sqlist;void creat_list(sqlist *ps,int arr[],int n);//用数组创建线性链表void init_list(sqlist *ps);//初始化线性链表void destory_list(sqlist *ps);//销毁线性链表void empty_list(sqlist *ps);//判断链表是否为空void length_list(sqlist *ps);//求线性链表的长度void travel_list(sqlist *ps);//遍历线性链表void get_data(sqlist *ps,int i);//求某个数据元素的值void locate_data(sqlist *ps,int e);//根据数据查找数据所在位置void insert_list(sqlist *ps,int i,int e);//插入元素void delete_list(sqlist *ps,int i,int e);//删除元素#endif
功能函数文件:list.c
//功能函数#include <stdio.h>#include <stdlib.h>#include "list.h"//用数组创建线性链表void creat_list(sqlist *ps,int arr[],int n){ int i=0; for(i=0;i<n;i++) { ps->data[i]=arr[i]; } ps->length=n;}//初始化线性链表void init_list(sqlist *ps){ ps=(sqlist *)malloc(sizeof(sqlist));//为线性链表分配存储空间 ps->length=0;}//遍历线性链表void travel_list(sqlist *ps){ int i=0; for(i=0;i<ps->length;i++) { printf("%d ",ps->data[i]); } printf("\n");}//销毁线性链表void destory_list(sqlist *ps){ free(ps); ps=NULL;}//判断是否为空表void empty_list(sqlist *ps){ if(ps->length==0) { printf("链表为空\n"); } else { printf("链表不为空\n"); } }//求线性标的长度void length_list(sqlist *ps){ printf("线性表长为%d\n",ps->length);}//求某个数据元素的值void get_data(sqlist *ps,int i){ if(i>1&&i<ps->length) { printf("第%d个元素是%d\n",i,ps->data[i-1]); }}//求元素所在的位置void locate_data(sqlist *ps,int e){ int i=0; while(i<ps->length && e!=ps->data[i]) { i++; } printf("元素%d是第%d个\n",e,i+1);}//插入元素void insert_list(sqlist *ps,int i,int e){ int j; i--; for(j=ps->length-1;j>=i;j--) { ps->data[j+1]=ps->data[j]; } ps->data[i]=e; ps->length++;}//删除元素void delete_list(sqlist *ps,int i,int e){ int j; i--; e=ps->data[i]; printf("删除的元素是%d\n",e); for(j=i;j<ps->length;j++) { ps->data[j]=ps->data[j+1]; } ps->length--;}
测试函数:main.c
#include "list.h"#include <stdio.h>#include <stdlib.h>int main(){ //sqlist *ps;//这是我一开始写的,函数参数传的是ps,结果运行后提示段错误,原因是这种参数传递是值传递,而我没有给指针赋值,导致实际参数传进函数的时候没有修改实际的指针。 //sqlist sq;//这是后来写的,实参给&sq就可, sqlist *ps=(sqlist *)malloc(sizeof(sqlist));//这是最后用的,值传递的是动态内存的地址,所有实际对地址操作。 int arr[]={5,8,10,12,34,62}; creat_list(ps,arr,6); travel_list(ps); empty_list(ps);//非空 locate_data(ps,10); get_data(ps,4); insert_list(ps,4,15); travel_list(ps); delete_list(ps,4,0); travel_list(ps); destory_list(ps); return 0;}上述参数的传递也可以用二级指针,我自己试过了,发现自己对指针的传递方面还有不足,多看看吧。最后谢谢我同学的帮助,Thanks,鸡sir。
0 0
- 数据结构算法——顺序表
- 数据结构算法——顺序表应用
- 数据结构—顺序表
- 数据结构——顺序表删除之建表算法
- 数据结构与算法——线性表顺序存储结构
- 再回首,数据结构——顺序表的常见算法
- 数据结构之自建算法库——顺序表
- 数据结构算法——顺序表的应用
- 数据结构之自建算法库——顺序表
- 数据结构——顺序表删除之移位算法
- 数据结构——顺序表互换之逆置算法
- 数据结构第八周项目——顺序表算法
- 数据结构与算法——顺序栈
- 数据结构实践——顺序串算法
- 数据结构实践——顺序串算法
- 数据结构与算法--顺序表
- 数据结构——顺序表
- 数据结构——顺序表
- mysql数据库配置
- 动态规划
- OpenCV和MATLAB下运用OTSU法(最大类间方差法)对图像作二值化处理的源程序!
- 更改Web应用地址栏显示的图标
- 浅析Web前端开发行业的发展
- 数据结构算法——顺序表
- java 大数据学习笔记(一)并行开发
- Android 6.0权限管理
- ubuntu 14.10 x64安装H3C iNode
- spring aop事务传播方式和隔离级别
- HttpClient4.3教程
- java:BIO、NIO、AIO区别
- php代码优化
- Activity生命周期