#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++; } }