顺序表的初始化及遍历
#include<iostream> using namespace std; #define OK 1 //表示状态 #define OVERFLOW -2 #define MAXSIZE 100 //数组最大长度 typedef int Elemtype; typedef int Status; typedef struct { Elemtype *elem; //存储空间的基地址 int lenght; //顺序表的长度 }Sqlist; //定义顺序表 Status Initlist(Sqlist &L) { L.elem = new Elemtype[MAXSIZE]; //开辟一个存放整数的数组(包括MAXSIZE个整数),返回首元素的地址 if (!L.elem) exit(OVERFLOW); //开辟空间失败退出程序 OVERFLOW的值非0表示非正常退出 L.lenght = 0; //顺序表长度为0,表示当前顺序表里并没有存入数据 return OK; } Status ListTraverse(Sqlist L) { //遍历顺序表 Elemtype *p; p = L.elem; if (L.lenght > 0) { cout << "当前顺序表一共有" << L.lenght << "个元素,分别是" << endl; for (int i = 1; i < L.lenght; i++) { cout << *p << endl; *p++; } } else { cout << "当前顺序表为空!" << endl; } return 0; } int main() { Sqlist la; Initlist(la); ListTraverse(la); delete la.elem; system("pause"); return 0; }
顺序表的插入、取值、查找和删除
#include<iostream> using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MAXSIZE 100 typedef int Status; typedef int Elemtype; // 定义顺序表结构 typedef struct { Elemtype *elem; // 顺序表存储空间的基地址 int length; //顺序表的长度 }Sqlist; // 初始化顺序表 Status InitList(Sqlist &L) { L.elem = new Elemtype[MAXSIZE]; // 在内存中为顺序表开辟存储空间 if (!L.elem) exit(OVERFLOW); L.length = 0; // 空表长度为0 return OK; } // 向顺序表中插入数据 Status InsertList(Sqlist &L, int i, Elemtype e) { //三个数据分别是 顺序表 插入数据的位置 插入数据的值 // 第一步 先判断插入数据的位置是否合法 i的合法范围是1到L.length+1 if (i<1 || i>L.length + 1) return ERROR; // 第二步 判断存储空间是否已满 if (L.length == MAXSIZE) return ERROR; // 第三步 将第i个到最后一个元素一次向后移动一个位置 将第i个位置空出来 for (int j = L.length - 1; j >= i - 1; j--) { L.elem[j + 1] = L.elem[j]; } // 将数据插入到顺序表 L.elem[i - 1] = e; ++L.length; //表长加一 此步存疑 之后实验操作一下 return OK; } // 遍历顺序表 Status ListTraverse(Sqlist L) { // 遍历顺序表要通过指针间接访问数组 Elemtype *p; p = L.elem; //指针变量p指向数组第一个元素 // 第一步 判断顺序表是否为空 if (L.length > 0) { cout << "当前顺序表一共有" << L.length << "个元素,分别是:" << endl; for (int i = 1; i <= L.length; i++) { cout << *p << endl; *p++;//地址往后移一位 } } else { cout << "当前顺序表为空" << endl; } return OK; } // 取值 Status GetElem(Sqlist L, int i,Elemtype &e) { //判断i是否合法 if (i<1 || i>L.length) return ERROR; e = L.elem[i - 1]; return OK; } // 查找 int LocateList(Sqlist L, Elemtype e) { // 在顺序表中查找值为e的数据元素,并返回其序号 for (int i = 0; i < L.length; i++) { if (L.elem[i] == e) return i + 1; } return 0; } // 删除 Status DeleteList(Sqlist &L, int i) { // 在顺序表中删除第i个元素 // 判断i值是否合法 if (i<1 || i>L.length) return ERROR; // 从第i+1个元素开始,数据元素往前移一位 for (int j = i - 1; j < L.length-1; j++) { L.elem[j] = L.elem[j + 1]; } --L.length; } int main() { Sqlist la; InitList(la); InsertList(la, 1, 3); InsertList(la, 1, 1); ListTraverse(la); DeleteList(la, 1); ListTraverse(la); system("pause"); return 0; }
浙公网安备 33010602011771号