#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)\)算法
从左到右扫描中缀表达式,若是是数字字符和圆点“.”,直接写入后缀表达式数组
遇到开括号,将开括号压入栈中,遇到匹配的闭括号,将栈中元素弹出并放入后缀表达式,直到栈顶元素为匹配的开括号时,弹出该开括号post
遇到的是操做符:spa
重复上述步骤,直到遇到结束标记“#”,弹出栈中的全部元素并放入后缀表达式数组中设计
操做符优先级:\(\#,(,+-,*/\)指针
-1 | 0 | 1 | 2 |
---|---|---|---|
# | ( | +- | */ |
设计一个算法,求顺序表中值为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++; } }