线性表
ZOey玊
努力成为大佬的小白|日日愿新
展开
-
C语言快速解决反转链表
反转链表原创 2022-04-14 21:53:17 · 961 阅读 · 1 评论 -
队列的基本操作
队列的基本操作一、队列是什么?二、队列的顺序存储结构1.队列的顺序存储2.循环队列(1)入队(2)出队判断队列已满/已空的条件三、队列的链式存储1.队列的链式存储2.链式队列的基本操作一、队列是什么?队列是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。二、队列的顺序存储结构1.队列的顺序存储#define MaxSize 10typedef struct{ ElemType data[MaxSize]; int front; //指向队头元素 int rear;原创 2021-03-14 14:44:47 · 213 阅读 · 0 评论 -
栈的基本操作
栈的基本操作一、栈是什么二、栈的顺序存储结构1.顺序栈的实现2.顺序栈的基本运算3.共享栈三.栈的链式存储结构链栈定义一、栈是什么栈是只允许在一端进行插入或删除操作的线性表;栈顶是指线性表允许进行插入或删除的一端;栈底是固定的,是不允许进行插入或删除的另一端。二、栈的顺序存储结构1.顺序栈的实现#define MaxSize 10 //定义栈中元素的最大个数;typedef struct{ ElemType data[MaxSize]; int top; //定义栈顶指针}SqSta原创 2021-03-14 12:31:45 · 135 阅读 · 0 评论 -
循环链表(循环单链表和双链表)
循环链表前言一、循环单链表的初始化二、判断是否为空或表尾结点三、循环双链表的初始化四、循环双链表的插入与删除前言对于循环单链表而言,在进行插入和删除时,可以让指针指向尾部,对于表头(通过尾部找到头部)和表尾的操作的时间复杂度均为O(1);一、循环单链表的初始化//带头结点的循环单链表typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*Linklist;bool Initlist(Linklist &L)原创 2021-02-04 15:51:00 · 3617 阅读 · 0 评论 -
双链表及其基本操作
双链表及其基本操作前言一、初始化(带头结点)二、插入三、删除和销毁四、遍历总结前言单链表无法逆向检索,而双链表可进可退,相比较而言存储密度更低一些一、初始化(带头结点)typedef struct DNode{ ElemType data; struct DNode *prior,*next;}DNode,*DLinklist;bool InitDLinklist(DLinklist &L){ L=(DNode *)malloc(sizeof(DNode)); if(L==N原创 2021-02-04 15:06:53 · 234 阅读 · 0 评论 -
单链表的建立(尾插法和头插法)
单链表的建立一、尾插法二、头插法总结一、尾插法Linklist List_TailInsert(Linklist &L){ //正向建立单链表 int x; //设Elemtype为整型 L=(Linklist)(malloc(sizeof(LNode)); //建立头结点,初始化空表 LNode *s,*r=L; //r为尾指针 scanf("%d",&x); //输入结点的值 while(x!=9999){ //当输入到9999结束 s=(LNode *)(mallo原创 2021-02-02 14:40:27 · 530 阅读 · 0 评论 -
单链表的查找
单链表的查找一、按位查找,返回第i个元素(带头结点)二、按值查找三、求表的长度一、按位查找,返回第i个元素(带头结点)LNode * GetElem(Linklist L,int i){ if(i<0) return NULL; LNode *p; int j=0; p=L; while(p!=NULL&&j<i){ //循环找到第i个结点 p=p->next; j++; } return p;}二、按值查找LNode * Locate原创 2021-02-02 13:42:17 · 1396 阅读 · 1 评论 -
单链表的基本操作
单链表的基本操作前言一、插入二、删除1.按位序删除,带头结点2.指定结点p的删除总结前言一、插入ListInsert(&L,i,e) 找到第i-1结点,并将新结点插入其后按位序插入,带头结点typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*Linklist;//在第i个位置插入元素e(带头结点)bool ListInsert(Linklist &L,int i,ElemType e){原创 2021-02-01 14:34:06 · 190 阅读 · 0 评论 -
单链表的定义
单链表的定义前言一、为什么使用typedef二、单链表的定义1.不带头结点2.带头结点总结前言用链式存储实现了线性结构,一个结点存储一个数据元素,各个结点的先后关系用一个指针表示一、为什么使用typedef没有使用typedef时struct LNode{ //定义单链表结点类型 ElemType data; //数据域,每个节点存放一个一个数据元素 struct LNode *next; };struct LNode* p=(struct LNode *)malloc(sizeof(原创 2021-02-01 12:09:01 · 1517 阅读 · 0 评论 -
顺序表的基本操作(删除,插入和查找)
顺序表的基本操作前言一、插入时间复杂度二、删除时间复杂度三、查找时间复杂度总结前言顺序表的基本操作主要有删除,插入和查找一、插入#define MaxSize 10typedef struct{ int data[MaxSize]; int length;}Sqlist;void Initlist(Sqlist &L){ for(int i=0;i<MaxSize;i++){ L.data[i]=0; //将所有数据元素设置为默认初始值 L.length=0;原创 2021-01-31 22:08:23 · 2454 阅读 · 2 评论 -
数据结构之线性表的基本操作
线性表的基本操作前言一、未使用“&”二、使用“&”三、使用指针总结前言什么时候传入参数引用“&”即对参数的修改结果需要带回来的时候一、未使用“&”//cpp#include<stdio.h>void test(int x){ x=1024; printf("函数内部x=%d\n",x);}int main(){ int x=1; printf("调用test前x=%d\n",x); test(x); printf("调用test后原创 2021-01-30 20:58:38 · 265 阅读 · 0 评论 -
顺序表的实现方式之静态分配和动态分配
顺序表的实现方式前言一、静态分配二、动态分配1.动态分配所需函数2.动态分配部分代码总结前言顺序表的实现方式分为两种,即静态分配和动态分配,其具有逻辑上相邻的数据元素物理上也相邻的特点一、静态分配1. 定义并且初始化顺序表注:(1)在内存中分配存储顺序表L的空间。包括MaxSize*sizeof(ElemType)和存储length的空间(2)把各个数据元素的值设为默认值(可省略)(3)将length长度设为0#include <stdio.h>#define Ma原创 2021-01-30 20:36:15 · 4198 阅读 · 4 评论