mian.c:
/**
* 测试为顺序链表测试。
*
*/
#include <stdio.h>
#include "dataElement.h"
#include "ListTable/SequenceList.h"
ElementType dataArray[] = {
{0, "goodman"},
{1, "goodsun"},
{2, "goodday"},
{3, "goodaby"},
{4, "gooddog"}
// {6, "goodcat"}
};
void TestPo();
int main() {
TestPo();
return 0;
}
void TestPo(){
SeqList seqList;
InitList(&seqList, dataArray, 6);
//sizeof(dataArray)/sizeof(dataArray[0])
PrintList(&seqList);
}
SequenceList.h:
//
// Created by adiao on 2022/9/18.
//
#ifndef CLISTPROJECT_SEQUENCELIST_H
#define CLISTPROJECT_SEQUENCELIST_H
#include "../dataElement.h"
#include <stdio.h>
#include <stdlib.h>
/** 初始化链表
* @param seqList 要出初始化的顺序表
* @param elemArray 初始化时要添加的元素内容数组
* @param length 初始化时添加的元素个数
*
*/
//初始化顺序表的抽象类型
void InitList(SeqList * seqList, ElementType * elemArray, int length);
/** 初始化链表
* @param seqList 要插入的顺序表
* @param index 通过下标确定位置
* @param element 要插入的元素
*
*/
//通过下标来添加参数
void InsertElement(SeqList * seqList, int index, ElementType element);
void PrintList(SeqList * seqList);
#endif //CLISTPROJECT_SEQUENCELIST_H
dataElement.h:
//
// Created by adiao on 2022/9/18.
//
#ifndef CLISTPROJECT_DATAELEMENT_H
#define CLISTPROJECT_DATAELEMENT_H
#define MAX_SIZE 255
/*
用来定义数据元素
*/
// typedef int ElementType;
typedef struct
{
int id;
char * name;
}ElementType;
// 定义顺序表结构
typedef struct{
//顺序表中的数据元素集合
ElementType datas[MAX_SIZE];
//顺序表中的元素个数
int length;
}SeqList;
#endif //CLISTPROJECT_DATAELEMENT_H
ListTable.c:
//
// Created by adiao on 2022/9/18.
//
//
// Created by adiao on 2022/9/18.
//
#include "SequenceList.h"
/** 初始化链表
* @param seqList 要出初始化的顺序表
* @param elemArray 初始化时要添加的元素内容数组
* @param length 初始化时添加的元素个数
*
*/
//初始化顺序表的抽象类型
void InitList(SeqList * seqList, ElementType * elemArray, int length)
{
if (length > MAX_SIZE)
{
/* code */
printf("超出了数组的最大容量,初始化失败");
return;
}
seqList->length = 0;
for ( int i =0; i < length - 1; i++)
{
/* code */
InsertElement(seqList, i, elemArray[i]);
}
}
/** 初始化链表
* @param seqList 要插入的顺序表
* @param index 通过下标确定位置
* @param element 要插入的元素
*
*/
//通过下标来添加参数
void InsertElement(SeqList * seqList, int index, ElementType element){
//1、验证插入后的元素空间是否查过限定值
//2、index的值是否合法。【0,限定值-1】
//3、插入的index应该在length之内。
//4、从第length-1个下标开始,前面一个元素赋值给后面一个元素
if (seqList->length+1 >= MAX_SIZE)
{
/* code */
printf("数组已满,插入失败\n");
}
if (index < 0 || index > MAX_SIZE - 1)
{
/* code */
printf("只能在允许的下标范围内插入元素【0,%d\n", MAX_SIZE - 1);
}
if (index > seqList->length)
{
/* code */
printf("插入的下标超过了数组的最大长度-1,插入失败\n");
}
//在C89标准版中不允许在for中直接定义变量。
for (int i = seqList->length - 1; i >= index; i--){
/* code */
seqList->datas[i+1] = seqList->datas[i];
}
//5、将要插入的值赋值给第index个元素
seqList -> datas[index] = element;
//6、顺序链表的总长度+1!!!
seqList -> length++;
}
void PrintList(SeqList * seqList){
for (int i = 0; i < seqList->length; i++)
{
/* code */
printf("%d\t%s\n", seqList->datas[i].id, seqList->datas[i].name);
}
}
结果:
为什么会这样?按理说不是在InsitList函数中加入一个5的长度就可以将自己定义好的数组内容给打印出来么?
为啥要6个长度?