说明:将元素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 ", s.data[i]); } printf(" "); }
删除线性表中第i个数据结点
#include <stdio.h> #include "header.h" // 删除线性表中第i个数据结点 void DeleteSeqList(SeqList *L, int i) { int j; if(i < 1 || i > L->length) printf("非法位置 "); 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 ", 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 ", LocateSeqList(L, 2)); // 5 }