#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種