数据结构顺序表定义和实现
来源:互联网 发布:你见过最恐怖的事 知乎 编辑:程序博客网 时间:2024/06/09 17:28
首先是顺序表的抽象数据类型的定义
// file: sequence.h#define MAXSIZE 100 // 定义顺序表最大的容量为100typedef int datatype; //给int 取了个别名叫datatypetypedef struct { datatype arr[MAXSIZE]; int size;}sequence;
接下来是它的大部分算法实现,当然我增加了冒泡排序:
// file: sequence.c#include "sequence.h"#include <stdio.h>#include <stdlib.h>/** 我会遇到这个问题,比如:append(sequence* sequ)和 display(sequence sequ)里面的参数对调下,是否也可以呢,答案是不行的,函数在调用时,会在另外开辟一块空间,如果不传递指针参数的话,函数的调用将是无意义的**//* 顺序表是线性存储,所以下面涉及到的第i个元素或第position位置,i和position取值范围是{0, 1, ..., size-1},当然这只是我理解的一种*/// 用C语言实现如下算法,实现如下函数(也叫方法)前,首先最好声明下----------void init(sequence* sequ); // 初始化顺序表void append(sequence* sequ, datatype x); // 往顺序表后部插入值为x的元素void display(sequence sequ); // 遍历int isEmpty(sequence sequ); // 判断是否为空,空为1,否则为0int find(sequence sequ, datatype x);int get(sequence sequ, int i);void insert(sequence* sequ, int position, datatype x);void dele(sequence* sequ, int position); // void sort_sequence(sequence* sequ);void bubble_sort(sequence* sequ); // 冒泡排序void init(sequence* sequ){ sequ->size = 0;}void append(sequence* sequ, datatype x){ if(sequ->size == MAXSIZE) { printf("sequence is full, can't append it \n"); exit(1); } sequ->arr[sequ->size] = x; sequ->size = sequ->size + 1; }void display(sequence sequ){ int i; if(sequ.size == 0) { printf("the sequence is empty, print nothing\n"); exit(1); } printf("the sequence is:\t"); for(i = 0; i < sequ.size; i++) { printf("%5d", sequ.arr[i]); }}int isEmpty(sequence sequ){ return (sequ.size == 0 ? 1 : 0);}int find(sequence sequ, datatype x){ int i = 0; if(sequ.size == 0) { printf("the sequence is empty, can't find %d \n", x); exit(1); } while(i < sequ.size && sequ.arr[i] != x) { i++; } return (i < sequ.size ? i : -1);}int get(sequence sequ, int i){ if(i < 0 || i > sequ.size - 1) { printf("can't get the %dst value\n"); exit(1); } else return sequ.arr[i];}void insert(sequence* sequ, int position, datatype x){ int i; if(position > -1 || position < sequ->size) for(i = sequ->size; i > position; i--) { sequ->arr[i] = sequ->arr[i-1]; } sequ->arr[position] = x; sequ->size++; }void delete(sequence* sequ, int position){ int i; if(position > -1 || position < sequ->size) { for(i = position; i < sequ->size - 1; i++) sequ->arr[i] = sequ->arr[i+1]; } sequ->size--;}void sort_sequence(sequence* sequ){ if(sequ->size != 0) bubble_sort(sequ); printf("\n"); display(*sequ);}void bubble_sort(sequence* sequ){ int i, j, n, temp; n = sequ->size; for(i = 1; i < n; i++) for(j = 0; j < n - i; j++) { if(sequ->arr[j] > sequ->arr[j+1]) { temp = sequ->arr[j]; sequ->arr[j] = sequ->arr[j+1]; sequ->arr[j+1] = temp; } }}
下面是顺序表实现方式:
#include <stdio.h>#include "sequence.c"#define MAX 8int main(){ int i; int a[MAX] = {2, 5, 6, 3, 19, 0, 7, 10}; sequence sequ; // line 1 sequence* sequ_pointer = &sequ; // line 2 // line 2的代码可以不用的,那传递顺序表指针时就用&sequ,经检验使用指针变量sequ_pointer比直接传地址值&sequ更节约时间,这就是使用指针变量的的好处吧 init(sequ_pointer); for(i = 0; i < MAX; i++) append(sequ_pointer, a[i]); display(sequ); sort_sequence(sequ_pointer); append(sequ_pointer, 8); sort_sequence(sequ_pointer); return 0; }
0 0
- 数据结构顺序表定义和实现
- 数据结构--顺序表定义及python实现
- 数据结构 线性表 顺序表示和实现
- 数据结构篇:实现顺序表和单链表
- 数据结构顺序表实现
- 数据结构顺序表的定义(Java)
- 【顺序表】的定义和实现1数组法
- 数据结构线性表顺序结构的定义与实现C语言
- 数据结构之:线性表的顺序表示和实现
- 线性表的顺序表示和实现 - 数据结构
- 数据结构1:线性表的顺序表示和实现
- 数据结构之线性表的顺序表示和实现
- 【数据结构】-线性表的顺序表示和实现
- 线性表的顺序表示和实现(数据结构)
- 数据结构(1):线性表的顺序表示和实现
- 数据结构---线性表的顺序表示和实现
- 数据结构——线性表顺序表示和实现
- 数组的定义和顺序实现
- Android 开发环境安装
- 欢迎使用CSDN-markdown编辑器
- EXCEL VBA字符串替换
- appendChild() , insertBefore()插入节点需注意的问题
- Map.Entry接口源码简析
- 数据结构顺序表定义和实现
- python MRJob
- 类名.this
- Android的多语言实现
- SQL Server 2000 视图部分内容提要
- JetBrains WebStorm 注册码>
- How to enable cURL in PHP / XAMPP
- MM模块-控制采购订单中某些项目的输出显示
- Jenkins任务构建后notification形式通知到手机