顺序表线性存储12345678910111213141516171819202122232425262728293031323334353637383940typedef struct //初始化定义{ int data[MAX]; //存储元素的数组 int length; //线性表当前的长度} SeqList;void initlist(SeqList *L) //初始化{ L->length = 0; //初始化长度为0}int insertElement(SeqList *L, int pos, int elem) //进行插入操作 elem为插入的值 , pos为插入的位置{ if (pos < 0 || pos > L->length || L->length >= MAX) //条件为:如果插入位置比0小 如果插入位置比数组长度大 如果已知数组长度比最大所开的数组长度还大 { return -1; //插入位置不合法 或者 表已经满了 } for (int i = L->length; i > pos; i--) // 从表的末尾开始一个一个往后移动 { L->data[i] = L->data[i - 1]; // 将元素后移 } L->data[pos] = elem; //插入元素 L->length++; //长度++ return 0; //插入成功}int deleteElement(SeqList *L, int pos){ if (pos < 0 || pos >= L->length) //删除的位置不合法 , 即删除的位置比0小 删除的位置比已知数组长度大 { return -1; } for (int i = pos; i < L->length - 1; i++) //从被删除的位置一个一个往前移动,直到最后 { L->data[i] = L->data[i + 1]; //元素前移 } L->length--; return 0; //删除成功} //不得不吐槽一句,效率是真的低,但确实简单易懂 链式存储12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152//链式存储typedef struct Node{ int data; //数据域 struct Node *next; //指针域} Node, *LinkList;void initList(LinkList *L) //初始化列表{ *L = (LinkList)malloc(sizeof(Node)); //分配内存给头结点 (*L)->next = NULL; //初始化为空表}int insertElement(LinkList L, int pos, int elem) //插入//其中L指的是一个指向链表头结点的指针、 pos 指的是要插入的新元素的位置 elem 指的是要插入到链表里的新元素的值{ LinkList p = L;//将指针p初始化为链表的头节点L int j = 0;//初始化计数器,用于跟踪当前节点的位置 while (p && j < pos) //找到插入位置 { p = p->next;//移动指针p到下一个节点 j++;//增加计数器 } if (!p || j > pos) { return -1; //插入位置不合法 } LinkList s = (LinkList)malloc(sizeof(Node));//创建新的节点并插入 s->data = elem;//将要插入的元素elem值赋给新节点data域 s->next = p->next; //插入操作,将新节点的next指向下一节点,即插入位置后的节点 p->next = s;//将当前节点p的next指向新节点s,完成插入操作 return 0; // 插入成功}int deleteElement(LinkList L, int pos) //删除//逻辑同插入节点一样,不必赘述{ LinkList p = L; int j = 0; while (p->next && j < pos) //找到删除的位置 { p = p->next; j++; } if (!p->next || j > pos) //删除位置不合法 { return -1; } LinkList q = p->next; p->next = q->next; // 删除操作 free(q); //将q清理 return 0; //删除成功}