// 顺序表(静态分配空间)
#include <stdio.h>
#include "stdbool.h" /* bool */
#include "stdlib.h" /* malloc */
#include "string.h" /* memset */
#define MAXSIZE 50
typedef int DataType;
// 定义结构体
typedef struct {
DataType data[MAXSIZE]; // 数据域
int length;
}SeqList;
void listInit(SeqList ** seq_p);
bool listInsert(SeqList * seq, int index, DataType c);
DataType listDelete(SeqList * seq, int index);
int getLocate(SeqList * seq, int value);
DataType getValue(SeqList *list, int value);
int length(SeqList * seq);
void printSeq(SeqList * seq);
int main() {
SeqList* seqList;
listInit(&seqList); // 初始化线性表
/** 初始化也可以直接写成:
* SeqList seq;
* SeqList* seqList = &seq;
*/
listInsert(seqList, 1, 9);
listInsert(seqList, 2, 10);
listInsert(seqList, 3, 11);
listInsert(seqList, 4, 12);
printf("表长:%d\n", length(seqList));
if(listDelete(seqList, 2)!=-1) {
printf("删除第2个元素成功\n");
}
printf("获取第2个元素的值:%d\n", getValue(seqList, 2));
printf("获取值为12的元素所在的位置:%d\n", getLocate(seqList, 12));
printSeq(seqList);
return 0;
}
/**
* 打印顺序表
* @param seq
*/
void printSeq(SeqList * seq) {
printf("顺序表:");
for (int i = 0; i < seq->length; ++i) {
printf("%d", seq->data[i]);
if(i != seq->length-1) {
printf(" ===> ");
}
}
}
/**
* 初始化顺序表
* @return
*/
void listInit(SeqList ** seq_p) {
// 为结构体分配空间
*seq_p = (SeqList *) malloc(sizeof(SeqList));
// 初始化
(*seq_p)->length = 0;
memset((*seq_p)->data, 0, MAXSIZE);
}
/**
* 顺序表插入操作
* @param seq
* @param index 插入位置
* @param num 插入值
* @return
*/
bool listInsert(SeqList * seq, int index, DataType c) {
// 判断插入位置是否有效,插入位置为 1 ~ length + 1 实际对应数组的下标为 0 ~ length
if(index < 1 || index > seq->length + 1) {
return false;
}
// 判断顺序表是否还有空间
if(seq->length >= MAXSIZE) {
return false;
}
// index后的元素往后移
for (int i = seq->length; i >= index; --i) {
seq->data[i] = seq->data[i - 1];
}
// 插入
seq->data[index - 1] = c;
seq->length++;
return true;
}
/**
* 删除第index个元素
* @param seq
* @param index
* @return
*/
DataType listDelete(SeqList * seq, int index) {
if(index < 1 || index > seq->length) {
return -1;
}
int res = seq->data[index - 1];
// i位置后的元素前移
for (int i = index - 1; i < seq->length - 1; ++i) {
seq->data[i] = seq->data[i + 1];
}
seq->length--;
return res;
}
/**
* 返回表长
* @param seq
* @return
*/
int length(SeqList * seq) {
return seq->length;
}
/**
* 按位查找, 获取第index个元素的值
* @param list
* @param index
* @return
*/
DataType getValue(SeqList * seq, int index) {
if(index < 1 || index > seq->length) {
return -1;
}
return seq->data[index - 1];
}
/**
* 按值查找
* @param seq
* @param value 待查找的值
* @return
*/
int getLocate(SeqList * seq, int value) {
for (int i = 0; i < seq->length; ++i) {
if (seq->data[i] == value) {
return i + 1;
}
}
return -1;
}
数据结构------顺序表(C/C++)
最新推荐文章于 2024-07-25 23:22:43 发布