数据结构-王道考研顺序表算法
#include "stdio.h"
#include <stdlib.h>
//Position代表的是数组的下标,用整型表示
typedef int Position;
//ElementType为元素类型
typedef int ElementType;
//PtrToLNode为结构体指针类型
typedef struct LNode * PtrToLNode;
#define MAXSIZE 100
#define ERROR -1
struct LNode
{
ElementType Data[MAXSIZE];
Position Last;
};
typedef PtrToLNode List;
//初始化操作
List initialize() {
List list;
list = new LNode;
for (int i = 0; i < 10;i++) {
list->Data[i] = rand() % 100+1; //1-100的随机数
}
list->Last = 9;
return list;
}
//查找元素
Position Find(List list, ElementType x) {
Position i = 0;/*从下标0,即第一个元素开始找*/
while (i <= list->Last&&list->Data[i] != x)
{
i++;
}
if (i > list->Last) {/*i的下标大于0则代表没找到,返回错误信息*/
return ERROR;
}
return i; /*找到则反正该元素的下标*/
}
//插入元素
bool Insert(List list, ElementType x, int i) {
/*
(1)将ai-an顺序往后移动(移动次序是从an到ai),为新元素让出位置
(2)将X置入空出的第i个位序
(3)修改Last指针(相当于修改表长),使之仍指向最后一个元素
*/
//注:此时的i指的是第i个位置,而不是下标
if (list->Last == MAXSIZE - 1) {
printf("表已满,不能插入");
return false;
}
/*检查插入位序是否正确,是否在1-n+1,n为当前元素个数,即Last+1*/
if (i<1 || i>list->Last + 2) {
printf("位序不合法");
}
//从第i个位置开始,将元素往后移
for (int j = list->Last; j >= i - 1; j--) {
list->Data[j + 1] = list->Data[j];
}
//新元素插入第i个位置
list->Data[i - 1] = x;
//last仍然指向最后的元素
list->Last++;
return true;
}
//删除元素
bool Delete(List list, int i) {
/*
(1)将ai+1-an顺序往前移动,ai元素被ai+1覆盖
(2)修改Last指针(相当于修改表长),使之仍指向最后一个元素
*/
//注:此时的i指的是第i个位置,而不是下标
if (i<1 || i>list->Last + 1) {
printf("位置%d元素不存在", i);
return false;
}
for (int j = i; j <= list->Last; j++) {
list->Data[j - 1] = list->Data[j];//将i+1位置及之后的元素顺序向前移动
}
//last仍然指向最后的元素
list->Last--;
return true;
}
//打印顺序表
void PrintList(List list) {
printf("顺序表元素:\n");
for (int i = 0; i <= list->Last;i++) {
printf("%d\t",list->Data[i]);
}
printf("\n");
}