数据结构(一) 线性表

顺序表

存储结构

#define ElemType int
#define MAXSIZE 100
typedef struct{ElemType *elem;//初始地址int length;//长度
}SqList;

初始化

//初始化
void init(SqList& L){L.elem = new ElemType[MAXSIZE];if(!L.elem){cout << "内存分配失败" << endl;return;}L.length = 0;
}

创建长度为n的顺序表

void createList(SqList &L, int n){if(n <= 0 || n > MAXSIZE){cout << "n值不合法" << endl;return;}L.length = 0;cout << "请输入线性表" << n << "个数据:";for(int i = 0; i < n; i++){cin >> L.elem[i];L.length++;}
}

获取第i个元素

//获取第i个元素
ElemType getElem(SqList L, int i){if(i < 1 || i > L.length){cout << "输入的下标有误" << endl;return 0;}return L.elem[i - 1];
}

查找某个元素

//查找某个元素,找到返回位置,找不到返回0
int locateElem(SqList L, ElemType e){for(int i = 0; i < L.length; i++){if(e == L.elem[i]){return i + 1;}}return 0;
}

在第i个元素插入元素

//在第i个位置插入元素e
void ListInsert(SqList &L, int i, ElemType e){if((i < 1) || (i > L.length + 1)){cout << "i值不合法" << endl;return;}if(L.length == MAXSIZE){cout << "存储空间已满" << endl;return;}for(int j = L.length; j >= i; j--){L.elem[j] = L.elem[j - 1];}L.elem[i - 1] = e;++L.length;
}

删除第i个元素

//删除第i个元素
void ListDelete(SqList &L, int i){if(i < 1 || i > L.length){cout << "i值不合法" << endl;return;}for(int j = i; j < L.length; j++){L.elem[j - 1] = L.elem[j];}L.length--;
}

链表

存储结构

#define ElemType int
typedef struct LNode{ElemType data;struct LNode* next;
}LNode, *LinkList;

初始化

//初始化
bool init(LinkList &L){L = new LNode;if(!L){cout << "内存分配失败" << endl;return false;}L->next = NULL;return true;
}

取值

//取出第i个元素的值
bool getElem(LinkList L, int i, ElemType &e){LNode* p = L->next;int j = 1;while(p && j < i){p = p->next;++j;}if(!p || j > i){cout << "i值不合法" << endl;return false;}e = p->data;return false;
}

查找

//查找值为e的元素,返回节点
LNode *LocateElem(LinkList L, ElemType e){LNode *p = L->next;while(p != NULL){if(p->data == e){break;}p = p->next;}return p;
}

插入

//在第i个元素中插入元素
bool ListInsert(LinkList &L, int i, ElemType e){LNode *p = L;int j = 0;while(p != NULL){p = p->next;j++;if(j == i - 1){break;}}if(!p || j > i - 1){return false;}LNode *s = new LNode;s->data = e;s->next = p->next;p->next = s;return true;
}

删除

//删除第i个元素
bool ListDelete(LinkList &L, int i){LNode *p = L;int j = 0;while(p != NULL){p = p->next;j++;if(j == i - 1){break;}}if(!p || j > i - 1){return false;}LNode *s = p->next;p->next = s->next;delete s;return true;
}

前插法创建链表

//前插法创建链表
void creatListH(LinkList &L, int n){L = new LNode;L->next = NULL;LNode *p;cout << "依次输入" << n << "个节点的值:";for(int i = 0; i < n; i++){p = new LNode;cin >> p->data;p->next = L->next;L->next = p;}
}

后插法创建链表

//后插法创建链表
void creatListR(LinkList &L, int n){L = new LNode;L->next = NULL;LNode *r = L;//尾指针LNode *p;cout << "依次输入" << n << "个节点的值:";for(int i = 0; i < n; i++){p = new LNode;cin >> p->data;p->next = NULL;r->next = p;r = p;//尾指针更新}
}

线性表相关算法

连接两个有序链表

void mergeTwoList(LinkList &LA, LinkList &LB, LinkList &LC){LNode *pa = LA->next;//用于遍历LA链表LNode *pb = LB->next;//用于遍历LB链表LC = LA;//合并后的链表,让LC指向LA的头节点LNode *pc = LC;//用于创建合并链表while(pa && pb){if(pa->data <= pb->data){pc->next = pa;//连接pa节点pc = pa;//pc指针后移pa = pa->next;//pa指针后移}else{pc->next = pb;pc = pb;pb = pb->next;}}pc->next = pa ? pa : pb;//将非空表的剩余片段插入到pc所指节点之后
}

链表反转

void reverseList(LinkList &L){LNode *p = L->next;//用于遍历链表L->next = NULL;//原链表清除数据LNode *q;//用于临时保存下一个节点while(p){q = p->next;//保存下一个节点p->next = L->next;//让插入节点的next指向当前链表头节点的下一个节点L->next = p;//让当前链表头节点的下一个节点指向插入的节点p = q;//指针后移}
}

删除倒数第k个节点

void listDeleteK(LinkList &L, int k){int len = getLength(L);if(k < 0 || k > len){cout << "k值不合法" << endl;return;}int n = len - k;LNode *p = L;int t = 0;while(t < n){p = p->next;t++;}LNode *q = p->next;p->next = q->next;delete q;
}
int getLength(LinkList L){int len = 0;L = L->next;while(L){len++;L = L->next;}return len;
}

删除顺序表所有值为item的数据元素

void deleteItem(SqList &L, ElemType item){int count = 0;//用于记录删除掉的节点数for(int i = 0, j = 0; i < L.length; i++){if(L.elem[i] == item){count++;}else{L.elem[j] = L.elem[i];j++;}}L.length -= count;
}

数据结构笔记(一) 线性表(C语言描述)相关推荐

  1. 数据结构笔记1 线性表-顺序表示

    预定义: 一.线性表的顺序表示 一些操作: 1. 线性表的初始化(参数为引用) //下列:函数返回类型 函数名称初始化线性表 参数表(参数类型 引用参数) Status InitList_Sq(SqL ...

  2. 2.数据结构笔记学习--线性表基本操作

    线性表的结构定义: 顺序表的结构定义: typedef struct {int data[maxSize]; //存放顺序表元素的数组,一般用 int A[maxSize];int length; / ...

  3. 数据结构与算法笔记(二) 线性表(数组描述)

    c++常用的数据描述方法是数组描述和链式描述,线性表可以用来说明这两方法,先介绍数组描述的线性表.后面再介绍链式描述的线性表. C++ STL容器vector和list相当于线性表的数组描述和链式描述 ...

  4. 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)

    [简述]数据结构-线性表(c语言实现)second60 20180422 1. 线性表的定义 线性表是具有相同特性的数据元素的一个有限序列. 2. 线性表抽象数据类型描述 ADT  List { 数据 ...

  5. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 左高树

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 优先级队列 - 左高树 一.左高树 1.外部节点 2.高度优先左高树 (1)定义 (2)特性 (3)HBLT 与 大小根树 3. ...

  6. C语言数据结构-第二章线性表-电大

    第二章线性表--内容简介 本章将进入线性结构的学习. 线性结构是最简单.最常用的一种数据结构. 本章将学习线性表的定义.顺序和链式两种存储方式及相应存储结构上的运算实现.通过典型示例训练,掌握线性表的 ...

  7. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 回溯法 一.算法思想 二.货箱装载 1.问题描述 2.回溯算法 3.实现 4.测试代码 一.算法思想 回溯法是搜索问题解的一种系 ...

  8. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 竞赛树 一.赢者树 二.二叉树的数组描述(补充) 1.声明 2.实现 三.赢者树 1.抽象数据类型 2.赢者树的表示 3.声明 ...

  9. Java版数据结构与算法——线性表

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...

  10. 数据结构复习题(线性表)

    数据结构复习题(线性表) 线性表 选择题 填空题 判断题 解答题 顺序表的插入和删除 单链表的插入与删除,创建 线性表 选择题 用单链表方式存储的线性表,存储每个节点需要两个域,一个是数据域,另一个是 ...

最新文章

  1. ActiveReports 报表应用教程 (2)---清单类报表
  2. 计算机图形学三大应用领域,计算机图形学作业
  3. 为什么使用@tablename起别名产生的sql语句不能用_10个简单步骤,完全理解SQL
  4. linux PCI驱动调用字符设备驱动方式
  5. java client和servers_“java -server”和“java -client”之间的真正区别?
  6. java8循环_Java8里请不要再使用循环语句
  7. 開博客了, 因為搞Delphi 開發的關於Delphi學習
  8. java 网络百度搜索_Java爬虫怎么调用百度搜索引擎,对关键字的网页爬取?
  9. 小莫qq影视机器人-自定义对接影视教程
  10. java scjp考试_Java开发网 - 【经验】今天以96通过SCJP考试(含考试经验和部分真题)[转帖]...
  11. python掷骰子小游戏编程入门_MicroPython实战:开发一款掷骰子小游戏
  12. 平面设计之PS(前)
  13. oracle if语句使用方法,Oracle IF语句的使用
  14. embed标签属性的介绍和用法
  15. LTE中CQI反馈学习笔记
  16. Mars 开源月报(2020.3)
  17. 使用再生龙镜像备份还原linux,以及遇到的问题和解决方法
  18. ElasticSearch报错:FORBIDDEN/12/index read-only / allow delete (api)无法写入
  19. python简单图形输出_基于 Python Matplotlib 模块的高质量图形输出
  20. 微信文件删除了怎么恢复,2个实测有效的办法推荐

热门文章

  1. matlab无穷积分求解_python做微积分
  2. 高中英语计算机辅助教学例子,计算机辅助教学在英语听力中的运用
  3. linux awk搜索文本最后个字符串,[转载]linux下的文本处理命令sedawkgrep
  4. python编程英语单词下载2019_图形化编程软件-mPython下载2019正式版 下载_久友软件下载...
  5. java 基于类路径搜索_一种基于ClassLoader的自定义类查找方法与流程
  6. java中jsp怎么传递参数_急!Java问题,Java如何获得jsp传递的参数??
  7. 下行物理信道rs_这些CH结尾的LTE物理信道傻傻分不清楚?快来看这篇文章!
  8. python selenium语法_Python+Selenium基本语法
  9. ireport模块之间的动态传参及拼接SQL
  10. Mysql union和union all用法