#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)\)c++
#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;
从左到右扫描中缀表达式,若是是数字字符和圆点“.”,直接写入后缀表达式数组
遇到开括号,将开括号压入栈中,遇到匹配的闭括号,将栈中元素弹出并放入后缀表达式,直到栈顶元素为匹配的开括号时,弹出该开括号post
遇到的是操做符:spa
重复上述步骤,直到遇到结束标记“#”,弹出栈中的全部元素并放入后缀表达式数组中设计
操做符优先级:\(\#,(,+-,*/\)指针
-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的结点的个数code
算法步骤:队列
// 顺序表的存储结构定义以下(文件名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\) 的初始状态为空,元素 e一、$e\(二、\)e\(三、\)e\(四、\)e$5 和 $e$6 依次经过栈 \(S\),
一个元素出栈后即进入队列 \(Q\),若 6 个元素出队的序列为 $e\(二、\)e\(四、\)e\(三、\)e\(六、\)e$5 和 $e$1,则栈 \(S\)
的容量至少应该为3
编号为 \(1,2,3,4\) 的四列火车经过一个栈式的列车调度站,可能获得的调度结果总共有14种