顺序表Sqlist.cpp
生活随笔
收集整理的這篇文章主要介紹了
顺序表Sqlist.cpp
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
順序表Sqlist.cpp
文章目錄
- 順序表Sqlist.cpp
- 1 順序表插入邏輯
- 2 順序表刪除邏輯
- 3 代碼演示
- 4 運行結果
1 順序表插入邏輯
在表的第 i 個位置前插入一個元素
-
實現步驟:
- 將第 n 至第 i 位的元素向后移動一個位置;
- 將要插入的元素寫到第 i 個位置;
- 表長加1。
注意:事先應判斷: 插入位置i 是否合法?表是否已滿?
應當符合條件:1≤i≤n+1 或 i=[1, n+1]
插入時的平均移動次數為:n (n+1) / 2 ÷(n+1)=n/2≈O(n)
2 順序表刪除邏輯
刪除線性表的第i個位置上的元素
- 實現步驟:
- 將第 i+1 至第 n 位的元素向前移動一個位置;
- 表長減1。
注意:事先需要判斷,刪除位置i 是否合法?
順序表刪除一元素的時間效率為: T(n) = (n-1) / 2 ≈ O(n)
順序表插入、刪除算法的平均空間復雜度為 O(1)
3 代碼演示
以下代碼創建了一個順序表,以隨機數的方式給順序表賦初值,實現了基本的插入,刪除,遍歷
#include <stdlib.h> #include <time.h> #define MAXSIZE (10) #define OK (1) #define ERROR (0)typedef int ElementType; typedef struct ArrayList {ElementType data[MAXSIZE];int length; } *List;List CreateList(void) //創建順序表,初始化 {List L = (List)malloc(sizeof(struct ArrayList));L->length = 0;return L; }void InitList(List L) //給順序表賦初值 {srand((unsigned)(time(NULL)));for (int i = 0; i < MAXSIZE / 2; i++) { L->data[i] = rand()%71+20;L->length++;} }int Insert(List L, int position, ElementType e) {if (position < 1 || position > L->length + 1) {return ERROR;}if (L->length == MAXSIZE) {return ERROR;}for (int i = L->length - 1; i >= position - 1; i--) {L->data[i + 1] = L->data[i];}L->data[position - 1] = e;L->length++;return OK; }int Delete(List L, int position, ElementType *e) {if (position < 1 || position > L->length) {return ERROR;}*e = L->data[position - 1];for (int i = position - 1; i <= L->length - 1; i++) {L->data[i] = L->data[i + 1];}L->length--;return OK; }void PrtList(List L) {for (int i = 0; i <= L->length - 1; i++) {printf("%d ", L->data[i]);}printf("\n"); }int main(void) {int position;int e;List L = CreateList();InitList(L);PrtList(L);printf("\nplease input (position & element) to insert:");scanf("%d %d", &position, &e);if (Insert(L, position, e)) {printf("OK\n");PrtList(L);} else {printf("ERROR\n");}printf("please input (position) to delete:");scanf("%d", &position);if (Delete(L, position, &e)) {printf("OK\n");PrtList(L);} else {printf("ERROR\n");} }4 運行結果
總結
以上是生活随笔為你收集整理的顺序表Sqlist.cpp的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java面试知识点:红黑树、Stream
- 下一篇: 基于图嵌入的兵棋联合作战态势实体知识表示