#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype a[MAZXSIZE];
int size;
} sequence_list;
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype a[MAZXSIZE];
int size;
} sequence_list;
void insert(sequence_list *slt, datatype x, int position) {
int i;
if (slt->size == MAXSIZE) {
printf("\n顺序表是满的!没法插入!");
exit(1);
}
if (position < 0 || position > slt->size) // 如size为10,slt->a[i-1=9]存在,既可以不用>=
{
printf("\n指定的插入位置不存在!");
exit(1);
}
for (i = slt->size; i > position; i--) {
slt->a[i] = slt->a[i - 1];
}
slt->a[position] = x;
slt->size++;
}
时间复杂度:\(O(n)\)
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype a[MAZXSIZE];
int size;
} sequence_list;
void dele(sequence_list *slt, int position) {
int i;
if (slt->size == 0) {
pringf("\n顺序表是空的!");
exit(1);
}
if (position < 0 || position >= slt->size) // 如size为10,postion为10,slt->a[i+1=11]不存在,即不可以>
{
printf("\n指定的删除位置不存在!");
exit(1);
}
for (i = position; i < slt->size - 1; i++) // 循环到倒数第二个元素即可,因为后面是a[i+1]
{
slt->a[i] = slt->a[i + 1];
}
slt->size--;
}
时间复杂度:\(O(n)\)
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype a[MAXSIZE];
int top;
} sequence_stack;
从左到右扫描中缀表达式,如果是数字字符和圆点“.”,直接写入后缀表达式
遇到开括号,将开括号压入栈中,遇到匹配的闭括号,将栈中元素弹出并放入后缀表达式,直到栈顶元素为匹配的开括号时,弹出该开括号
遇到的是操作符:
重复上述步骤,直到遇到结束标记“#”,弹出栈中的所有元素并放入后缀表达式数组中
操作符优先级:\(\#,(,+-,*/\)
-1 | 0 | 1 | 2 |
---|---|---|---|
# | ( | +- | */ |
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype a[MAXSIZE];
int front;
int rear;
} sequence_queue;
#define MAXSIZE 100
typedef int datatype;
typedef struct {
datatype a[MAXSIZE];
int front;
int rear;
} sequence_queue;
设计一个算法,求顺序表中值为x的结点的个数
算法步骤:
// 顺序表的存储结构定义如下(文件名seqlist.h)
#include <stdio.h>
#define N 100 // 预定义最大的数据域空间
typedef int datatype; // 假设数据类型为整型
typedef struct {
datatype data[N]; // 此处假设数据元素只包含一个整型的关键字域
int length; // 线性表长度
} seqlist; // 预定义的顺序表类型
// 算法countx(L, x)用于求顺序表L中值为x的结点的个数
int countx(seqlist *L, datatype x) {
int c = 0;
int i;
for (i = 0; i < L->length; i++) {
if (L->data[i] == x) c++;
}
return c;
}
设计一个算法,将一个顺序表倒置。即,如果顺序表各个结点值存储在一维数组\(a\)中,倒置的结果是使得数组\(a\)中的\(a[o]\)等于原来的最后一个元素,\(a[1]\)等于原来的倒数第\(2\)个元素,\(\cdots\),\(a\)的最后一个元素等于原来的第一个元素
算法步骤:
// 顺序表的存储结构定义如下(文件名seqlist.h)
#include <stdio.h>
#define N 100 // 预定义最大的数据域空间
typedef int datatype; // 假设数据类型为整型
typedef struct {
datatype data[N]; // 此处假设数据元素只包含一个整型的关键字域
int length; // 线性表长度
} seqlist; // 预定义的顺序表类型
// 算法verge(L)用于顺序表倒置
void verge(seqlist *L) {
int t, i, j;
i = 0;
j = L->length - 1;
while (i < j) {
t = L->data[i];
L->data[i++] = L->data[j];
L->data[j--] = t;
}
}
已知一个顺序表中的各结点值是从小到大有序的,设计一个算法,插入一个值为\(x\)的结点,使顺序表中的结点仍然是从小到大有序
算法步骤:
// 顺序表的存储结构定义如下(文件名seqlist.h)
#include <stdio.h>
#define N 100 // 预定义最大的数据域空间
typedef int datatype; // 假设数据类型为整型
typedef struct {
datatype data[N]; // 此处假设数据元素只包含一个整型的关键字域
int length; // 线性表长度
} seqlist; // 预定义的顺序表类型
// 算法insertx(L, x)用于有序顺序表插入结点并仍然有序
void insertx(seqlist *L, datatype x) {
int j;
if (L->length < N) {
j = L->length - 1;
while (j >= 0 && L->data[j] > x) {
L->data[j + 1] = L->data[j]; // 元素统一往后挪
j--;
}
L->data[j + 1] = x;
L->length++;
}
}
长为 \(n\) 的顺序表中,任意位置插入的可能次数为n+1?次(包括头前和尾后)
设栈 \(S\) 和队列 \(Q\) 的初始状态为空,元素 e1、$e\(2、\)e\(3、\)e\(4、\)e$5 和 $e$6 依次通过栈 \(S\),
一个元素出栈后即进入队列 \(Q\),若 6 个元素出队的序列为 $e\(2、\)e\(4、\)e\(3、\)e\(6、\)e$5 和 $e$1,则栈 \(S\)
的容量至少应该为3?
编号为 \(1,2,3,4\) 的四列火车通过一个栈式的列车调度站,可能得到的调度结果总共有14种
原文:https://www.cnblogs.com/nickchen121/p/13765619.html