(郝斌讲学)数据结构学习篇(二)---数组的操作连续存储
来源:互联网 发布:jquery.cookie.js 编辑:程序博客网 时间:2024/05/16 09:36
012.连续存储数组的算法演示
线性结构:把所有的结点用一根直线穿起来.
一个字节有4个地址。
实现一个数组的案例
#include<stdio.h>#include<malloc.h>#include<stdlib.h> //包含了exit函数struct Arr{int * pBase; //数组第一个元素的地址int len; //数组的长度int cnt; //当前数组有效元素的个数};int get();bool append_arr(struct Arr * pArr, int val);bool insert_arr(struct Arr * pArr, int pos, int val); //pos值从1开始bool delete_arr(struct Arr * pArr, int pos, int * pVal);bool is_empty(struct Arr * pArr);bool is_full(struct Arr * pArr);void init_arr(struct Arr * pArr, int len);void sort_arr(struct Arr * pArr);void show_arr(struct Arr * pArr);void inversion_arr(struct Arr * pArr);int main(void){struct Arr arr;int p;init_arr(&arr,8);show_arr(&arr);append_arr(&arr,1);append_arr(&arr,2);append_arr(&arr,5);append_arr(&arr,6);show_arr(&arr);printf("插入的结果是:");insert_arr(&arr, 3, 88);insert_arr(&arr, 5, -5);insert_arr(&arr, 1, 60);show_arr(&arr);if(delete_arr(&arr, 2, &p)){printf("删除成功!\n");printf("删除的元素是:%d\n", p);}else{printf("删除失败!\n");}printf("删除的结果是:");show_arr(&arr);printf("倒置的结果是:");inversion_arr(&arr);show_arr(&arr);printf("排序的结果是:");sort_arr(&arr);show_arr(&arr);return 0;}//初始化数组void init_arr(struct Arr *pArr, int length){pArr->pBase = (int *)malloc(sizeof(int) *length);if(NULL == pArr->pBase){printf("动态内存分配失败!");exit(-1);}else{pArr->len = length;pArr->cnt = 0;}return;}//判断数组是否为空bool is_empty(struct Arr * pArr){if(0 == pArr->cnt)return true;elsereturn false;}//显示数组的数据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]);}printf("\n");}}//判断数组是否满了bool is_full(struct Arr * pArr){if(pArr->cnt == pArr->len)return true;elsereturn false;}//追加一个元素bool append_arr(struct Arr * pArr, int val){//满是返回falseif(is_full(pArr))return false;//不满时追加pArr->pBase[pArr->cnt] = val;(pArr->cnt)++;return true;}//插入一个元素bool insert_arr(struct Arr * pArr, int pos, int val){int i;if(is_full(pArr))return false;if(pos < 1 || pos > pArr->cnt+1)return false;for(i=pArr->cnt-1; i>=pos-1; --i){pArr->pBase[i+1] = pArr->pBase[i];}pArr->pBase[pos-1] = val;(pArr->cnt)++;return true;}//删除元素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;}//倒置数组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;}//排序数组void sort_arr(struct Arr * pArr){int i,j,t;for(i=0; i<pArr->cnt; ++i){for(j=i+1; j<pArr->cnt; ++j){if(pArr->pBase[i] > pArr->pBase[j]){t = pArr->pBase[i];pArr->pBase[i] = pArr->pBase[j];pArr->pBase[j] = t;}}}}
015.type的用法
#include <stdio.h>
typedef struct Node
{
int data; //数据域
struct Node * pNext; //指针域
}NODE, *PNODE; //NODE等价于struct Node, PNODE等价于struct Node*
int main(void)
{
return 0;
}
typedef int ZHENGXING;
int i = 10; ==>>ZHENGXING i = 10;
016.链表的定义
离散存储[链表]:n个节点离散分配,彼此通过指针相连。每个节点只有一个前驱节点,每个节点只有一个后续节点。首节点没有前驱节点,尾节点没有后续节点。
专业术语:
首节点:第一个有效节点
尾节点:最后一个有效节点
头结点:第一个有效节点之前的那个节点。没有存放有效数据,也没有存放有效数据的个数。目的是为了方便对链表的操作。
头指针:指向头结点的指针变量。
尾指针:指向尾节点的指针变量。
017.如果希望通过一个函数来对链表进行处理,我们至少需要链表的哪些参数?
只需要一个参数:头指针
因为我们通过头指针就可以推算出链表的其他所有信息。
019.链表的分类
单链表
双链表:每一个节点有两个指针域
循环链表:能通过任何一个节点找到其他所有的节点
非循环链表
0 0
- (郝斌讲学)数据结构学习篇(二)---数组的操作连续存储
- (郝斌讲学)数据结构学习篇(三)---链表的CRUD操作
- (郝斌讲学)数据结构学习篇(五)---队列的CRUD操作
- (郝斌讲学)数据结构学习篇(四)---栈的CRUD操作
- (郝斌讲学)数据结构学习篇(七)---树
- (郝斌讲学)数据结构学习篇(一)---大纲、简介、作用
- (郝斌讲学)数据结构学习篇(六)---递归专题
- 郝斌数据结构连续存储数组的算法演示
- 郝斌数据结构 12 连续存储数组的算法演示
- 数据结构---数组【连续存储】
- 【郝斌数据结构自学笔记】12-13_连续存储数组的算法演示
- 郝斌数据结构 13 连续存储数组的算法演示_2
- 跟着郝斌学数据结构(02)——连续存储数组的算法
- 数据结构学习---线性表顺序存储结构的应用(二):插入操作
- 数组连续存储的相关操作
- 数据结构(二)链表1:链式存储的基本操作
- 数据结构--连续存储数组算法
- 数据结构学习笔记之线性结构--连续存储[数组]
- HDU-2079 选课时间(题目已修改,注意读题)
- 虚拟摇杆SneakyInput的多点触摸问题
- perl的一些积累
- PAT_B_结构-02. 有理数加法(15)
- 两大开源游戏引擎Cocos2d-x及OGEngine对比分析
- (郝斌讲学)数据结构学习篇(二)---数组的操作连续存储
- 【用jersey构建REST服务】系列文章
- winXP,win7,Ubuntu12.04的恩怨情仇
- C++ 单例模式
- android mp3播放器
- PAT_B_结构-01. 有理数比较(10)
- WPF资源
- 黑马程序员-iOS学习日记(五)面向对象-self和super关键字
- 20 Practical Examples of RPM Commands in Linux