标签:Node 结点 return 复习 top next 插入 期末 数据结构
数据结构
算法概念,及其特性;数据结构的基本术语
- 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作
- 算法的五大特性:输入,输出,有穷性,确定性,可行性
- 数据结构的基本术语:
- 数据结构:相互之间存在一种或者多种特定关系的数据元素的集合
- 数据元素:一个数据元素可以由若干个数据项组成
- 数据项: 是数据不可分割的最小单元
顺序表,链表中各种情况下的插入,删除,访问操作的时间复杂度;执行插入,删除操作时,空和满的判断条件
操作 | 顺序表 | 链表 |
---|---|---|
访问 | O(1) | O(n) |
插入 | O(n) | O(n) |
删除 | O(n) | O(n) |
查找(位置)(值) | O(n) | O(n) |
注意特殊情况:
顺序表中:
1. 删除最后一个位置,以及在最后一个位置插入元素:==时间复杂度为O(1)==
链表中:
- 在第一个位置插入,在第一个位置删除,查找第一个位置:时间复杂度为O(1)
2.执行插入,删除操作时候,空和满的判断条件:
顺序表(last为当前表的长度):
1. 为空的条件: last == 0
2. 满的条件: last == MAXSIZE
链表中:
case 1: 带头结点
为空的条件: L->next ==NULL
为满的条件:略
case 2: 不带头结点
为空的条件: L == NULL
为满的条件:略
在q结点后,执行插入和删除操作的语句
1. 在头结点后插入新节点:
//L为头结点,p为工作指针,s为插入的新节点
s = (Node*)malloc(sizeof(Node));
s->next = L->next;
L->next = s;
2. 在头结点后删除结点:
//L为头结点,p为工作指针
p = L->next;
L ->next = L->next->next;
free(p);
- 插入新节点:
//,s为插入的新节点
s = (Node*)malloc(sizeof(Node));
s->next = q->next;
q->next = s;
4.删除q结点后的结点:
//p为工作结点
p = q->next;
q->next = q->next->next;
free(p);
结论:
- 顺序表中,在第i个位置插插入,平均移动n-i+1个元素(提示:i-1不动)
- 顺序表中,在第i个位置删除,平均移动n-1个元素
栈.队列的操作基本特性,存储结构; 循环队列的出队,入队操作语句;栈和队列执行插入,删除的时间复杂度
-
栈,队列的操作基本特性:
栈:先进后出
队列:先进先出
①顺序栈入栈操作:
Status Push (SqStack *S,ElemType e){ if(S->top == MAXSIZE-1) // 栈满了 { return error; } S->top++; S->data[S->top] = x; return OK; }
②顺序栈出栈操作:
Status Pop (SqStack *S,ElemType *e){ if(S->top == -1) // 栈空了 { return error; } *e = S->data[S->top]; S->top--; return OK; }
③链式栈入栈操作:
Node *Push(Node* top,ElemType e){ s = (Node*)malloc(sizeof(Node)); if(s == NULL){ printf("申请内存失败"); exit(-1); } else{ s->data = x; s->next = top; top = s; return top; } }
④链式栈出栈操作:
Node *Pop(Node* top,ElemType *x){ if(top == NULL){ printf("栈空了"); exit(-1); } else{ *x = top->data; p = top; top = top->next; free(p); return top; } }
-
栈,队列的存储结构:
都有顺序存储和链式存储
-
循环队列的出队,入队操作语句:
①出队操作:
Status enterQueue(SqQueue *Q ,ElemeType e)
{
if((Q->rear+1)%MAXSIZE == Q->front)//队满了
{
return error;
}
Q->data[Q->rear] = e;
Q->rear = (Q->rear+1)%MAXSIZE;
return OK;
}
②出队操作:
Status outQueue(SqQueue *Q ,ElemeType *e)
{
if(Q->rear == Q->front)//队空了
{
return error;
}
*e=Q->data[Q->rear];
Q->front = (Q->front+1)%MAXSIZE;
return OK;
}
==注意:==元素个数为: (rear-front+MAXSIZE)%MAXSIZE
标签:Node,结点,return,复习,top,next,插入,期末,数据结构 来源: https://blog.csdn.net/wangwangwangz/article/details/121956052
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。