数据结构
个人对于数据结构的总结
Technical^Blog
低调
展开
-
C++实现冒泡排序
Bubble Sort 即冒泡排序,这种写法相当于相邻的数字两两比较,并且规定:“谁大谁站右边”。经过 n−1 轮,数字就从小到大排序完成了。整个过程看起来就像一个个气泡不断上浮,这也是“冒泡排序法”名字的由来,先来理解算法思想: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直原创 2021-06-23 20:48:31 · 5989 阅读 · 0 评论 -
C++ 队列(手动偷懒)
其实在C++的#include中早就模板化了队列的实现,再也不用造轮子了,手动偷懒.jpg#include<iostream>#include<queue>using namespace std;int main(){ queue<int> q; for (int i = 1; i <= 10; i++) { //依次入队 q.push(i); } if (q.empty()) return -1; else cout原创 2021-06-23 19:30:16 · 106 阅读 · 0 评论 -
C++ 实现链表
一.C++实现链表二.Java实现链表结构图如下:原创 2021-06-22 14:27:48 · 1213 阅读 · 0 评论 -
C语言回文字符串判断(采用Stack)
本实例采用栈来实现,注意:栈是一种后进先出设计原则; 栈顶指针必须初始化;#include<stdio.h>#include<stdlib.h>#include<string.h>int main() { char a[101], s[101]; int i, len, mid, next, top; printf("Input strings:\n"); gets_s(a);//读取一行字符串 len = (int)strlen(a); mi原创 2021-04-12 22:54:16 · 264 阅读 · 0 评论 -
C语言实现队列
实现队列注意事项:删除元素,移动队首,往前覆盖即删除; 添加元素,移动队尾,往后添加新元素; 队列符合(First In First Out)即先进先出(FIFO)原则; 队列出队的方向具有一致性。#include<stdio.h>struct queue { int data[100];//队列主体放内容 int head; int tail;};int main() { struct queue q; int i; q.head = 1; q.tail =原创 2021-04-12 22:29:41 · 79 阅读 · 0 评论 -
C语言实现单链表增删改查实例
单链表的增删改查实例注意:使用链表的插入与删除时要严格注意所插入或者删除元素在本链表中的边界问题, 同时也要注意链表的判空问题, 注意链表指针最后一定要指向NULL#include<iostream>#include<stdlib.h>using namespace std;typedef struct Node { //结构体定义结点 int data; Node *next;}*LinkedList;//结构体指针LinkedListvoid In.原创 2021-04-08 22:05:54 · 436 阅读 · 3 评论 -
C语言实现单链表的头插法与尾插法
一.头插法//头插法建立单链表LinkList List_HeadInsert(LinkList &L) { LNode*s; int x; L = (LinkList)malloc(sizeof(LNode)); scanf("%d", &x); while (x != -9999) { s = (LNode*)malloc(sizeof(LNode));//创建新节点 s->data = x; s->next = L->next; L-原创 2021-04-07 13:56:17 · 490 阅读 · 0 评论 -
C语言实现单链表的查询
一.单链表按位查找//单链表的按位查找LNode *GetElem(LinkList L, int i) { if (i < 1) return false; LNode* p; int j = 0; p = L; while (p != NULL && j < i) {//循环找到第i个结点 p = p->next; j++; } return p;}二.单链表的按值查找//单链表按值查找LNode *Locate(.原创 2021-04-07 13:36:41 · 1965 阅读 · 0 评论 -
C语言实现单链表的删除
一.单链表的按位序删除//按位序删除(带头结点)bool ListDelete(LinkList &L, int i, int &e) { if (i < 1) { return false; } LNode * p; int j = 0; p = L; while (p != NULL && j < i - 1) { p = p->next; j++; } if (p == NULL) return false;原创 2021-04-07 13:06:42 · 3682 阅读 · 0 评论 -
C语言实现单链表的插入
1.带头结点按位插入(指定结点后插)//带头结点按位序插入bool ListInsert(LinkList &L, int i, int e) { if (i < 1) return false; LNode *p;//指针p指向扫描到的结点 int j = 0;//当前p指向的第几个结点 p = L;//L指向头结点,头结点是第0个结点(不存数据) while (p != NULL && j < i - 1) {//循环找到第i-1个结点 p原创 2021-04-06 23:14:14 · 4005 阅读 · 0 评论 -
C语言实现单链表
1.不带头结点单链表typedef struct LNode { int data; int *next;}*LinkList;//初始化一个空的单链表(不带头结点)bool InitList(LinkList &L) { L = NULL; return true;}//判断单链表是否为空(没有头结点)bool Empty(LinkList L) { return (L == NULL);}2.带头结点单链表bool InitHeadList(Lin原创 2021-04-06 21:55:19 · 73 阅读 · 0 评论 -
C语言顺序表(动态分配)查找
顺序表的按位查找与按值查找关键代码://按位查找int GetElem(SeqList L, int i) { if (i<1 || i>L.length) return 0; return L.data[i - 1];}//按值查找int LocateElem(SeqList L, int e){ for (int i = 0; i < L.length; i++) { if (L.data[i] == e) { return i + 1;原创 2021-04-06 20:43:18 · 477 阅读 · 0 评论 -
C语言实现顺序表的插入与删除
顺序表的插入与删除#include<stdio.h>#include<stdlib.h>#define InitSize 10typedef struct { int *data; int MaxSize; int length;}SeqList;void InitList(SeqList &L) { L.data = (int *)malloc(sizeof(int)*InitSize); L.length = 0;//初始化长度(空表) L.原创 2021-04-06 19:57:45 · 1245 阅读 · 1 评论 -
C语言顺序表实现
一.顺序表实现(静态分配)#include<stdio.h>#include<stdlib.h>#define MAXSIZE10 10typedef struct{ int data[MAXSIZE10]; int length;}SqList;//初始化一个顺序表void InitList(SqList &L){ L.length = 0;}int main(){ //声明一个列表L SqList L; //调用InitList函原创 2021-04-06 17:41:24 · 236 阅读 · 1 评论 -
线性表练习(5)
【题目描述】从顺序表中删除其值给定在s与t之间(包含s与t,要求s<t)的所有元素,若s或t不合理或顺序表为空,则显示出错信息并且退出运行。/*算法思想:从前向后扫描顺序表L,用k记录下元素值在s到t之间元素的个数(初始时k=0)对于当前扫描的元素,若其值不在s到t之间,则前移k个位置,否则执行k++由于这样每个不在s到t之间的元素仅移动一次,因此算法效率高*/#define MAXSIZE 100typedef int ElemType;typedef struct { int原创 2021-04-05 16:40:25 · 91 阅读 · 0 评论 -
数据结构408考研综合题线性表(四)
【题目描述】从有序顺序表中删除其值在给定值s与t之间(要求是s<t)的所有元素,若s或t不合理或者顺序表为空,则显示出错信息并退出运行。/*算法思想;先寻找大于等于s的第一个元素(第一个删除的元素),然后寻找值大于t的第一个元素(最后一个删除元素的下一个元素),要将这段元素删除,只需要将后面的元素前移。*/#define MAXSIZE 100typedef int Elemtype;typedef struct { int length; Elemtype data[MAXSI原创 2021-04-05 16:21:11 · 102 阅读 · 0 评论 -
数据结构408考研线性表综合题(三)
【题目描述】对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。/*解法一:用k记录顺序表L中不等于x的元素个数(即需要保存的元素个数),边扫描L边统计k,并将不等于x的元素向前移动k个位置,最后修改L的长度*/#define MAXSIZE 100typedef int ElemType;typedef struct { int length; ElemType data[MAXSIZE];}Sqlist;voi原创 2021-04-04 21:58:46 · 211 阅读 · 0 评论 -
数据结构408考研线性表综合题(二)
【题目描述】设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为O(1)。/*算法思想:扫描顺序表L的前半部分元素,对于元素L.data[i](0<=L.length/2)将其余后半部分的对应元素L.data[L.length-i-1]进行交换*/typedef int ElemType;#define MAXSIZE 100typedef struct { int length; ElemType data[MAXSIZE];}Sqlist;void Reser原创 2021-04-04 21:24:00 · 178 阅读 · 0 评论 -
数据结构408考研线性表综合题目(一)
【题目】从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除的元素的值。空出的位置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。/*算法思想;搜索整个数据表,查找最小值并记住其位置,搜索结束后用最后一个元素填补空出的最小值元素的位置。*/#define maxsize 100typedef int ElemType;typedef struct { int length; ElemType data[maxsize];}sqlist;bool Del_Min.原创 2021-04-04 21:09:02 · 211 阅读 · 0 评论 -
数据结构线性表——顺序表
#define Maxsize 22typedef int ElemType;typedef struct { ElemType data[Maxsize]; int length;}Sqlist;#define InitSize 100typedef struct { ElemType *data; int Max_size, length;}Seqlist;//顺序表插入bool ListInsert(Sqlist &L, int i, ElemType e) .原创 2021-04-04 20:46:30 · 101 阅读 · 0 评论 -
链表插入详解
单链表速成——增与删众所周知,链表是数据结构的重中之重,但有许多朋友对此并不感冒,甚至想骂#¥……#……#。本文主要介绍小编对于链表的喜与悲,乐于忧。先上图,添加结点 单链表结点类型声明 typedef int ElemType;//假设ElemType为自定义int型//单链表存储结构typedef struct LinkNode{ ElemTyp...原创 2021-04-01 13:31:54 · 11313 阅读 · 1 评论