說明:將元素x插入到順序表L的第i個數據元素之前,這個i是從1開始的,但是
程序中數組都是從0算起的,不要混淆了。
頭文件:
header.h
// 順序表的結構定義 #define Maxsize 100 //const int Maxsize = 100; // 預先定義一個足夠大的常數 typedef struct { int data[Maxsize]; // 存放數組的數組 int length; // 順序表的實際長度 }SeqList; // 順序表類型名為SeqList // SeqList L 定義L為一個順序表
主體文件:
main.c
順序表插入
#include <stdio.h> #include "header.h" // 順序表插入運算 void InsertSeqlist(SeqList *L, int x, int i) { int j; if(L->length == Maxsize) printf("表已滿"); if(i < 1 || i > L->length + 1) printf("位置錯"); // 檢查插入位置是否合法 for(j = L->length;j >= i;j--) { L->data[j] = L->data[j - 1]; // 整體依次向后移動 } L->data[i - 1] = x; L->length++; } main() { int i; int n = 5; SeqList s = {{1,2,3,4,5}, n}; InsertSeqlist(&s, 99, 2); for(i = 0;i < n + 1;i++) { printf("%d\n", s.data[i]); } printf("\n"); }
刪除線性表中第i個數據結點
#include <stdio.h> #include "header.h" // 刪除線性表中第i個數據結點 void DeleteSeqList(SeqList *L, int i) { int j; if(i < 1 || i > L->length) printf("非法位置\n"); for(j = i;j < L->length;j++) { L->data[j - 1] = L->data[j]; // 依次左移 } L->length--; } main() { int i; int n = 5; SeqList L = {{1,2,3,4,5}, n}; DeleteSeqList(&L, 2); for(i = 0;i < n - 1;i++) { printf("%d\n", L.data[i]); } }
在順序表中查找值為x的結點
#include <stdio.h> #include "header.h" // 在順序表中查找值為x的結點 int LocateSeqList(SeqList L, int x) { int i = 0; while(i < L.length && L.data[i] != x) i++; if(i < L.length) return i + 1; else return 0; } main() { SeqList L = {{100, 58, 102, 99, 2}, 5}; printf("%d\n", LocateSeqList(L, 2)); // 5 }