#include <stdio.h>
#include <stdbool.h>
#define LISTSIZE 100
typedef int DataType;
typedef struct SeqList
{
DataType data[LISTSIZE];
int nlength;
} SeqList;
/**
* 初始化线性表
*/
void initList(SeqList *list)
{
list->nlength = 0;
}
/**
* 验证线性表是否为空
*/
bool listEmpty(SeqList *list)
{
return list->nlength == 0;
}
/**
* 清空线性表
*/
void clearList(SeqList *list)
{
list->nlength = 0;
}
/**
* 通过下标查找元素
*/
DataType *getNode(SeqList *list, int i)
{
if(i < 0 || i > list->nlength - 1)
return NULL;
return &list->data[i];
}
/**
* 查找元素的位置
*/
int locateNode(SeqList *list, DataType x)
{
for(int i = 1; i < list->nlength; i++)
if(list->data[i] == x)
return i;
return -1;
}
/**
* 将元素插入线性表
*/
bool insert(SeqList *list, int i, DataType x)
{
if(list->nlength == LISTSIZE)
return false;
int insertPosition = i;
if(i < 0)
insertPosition = 0;
if(i > list->nlength - 1){
insertPosition = list->nlength;
}
for(int j = list->nlength - 1; j >= insertPosition; j--){
list->data[j+1] = list->data[j];
}
list->data[insertPosition] = x;
list->nlength++;
return true;
}
/**
* 根据下标删除元素
*/
bool deleteList(SeqList *list, int i)
{
if(i < 0 || i >= list->nlength){
return false;
}
for(int j = i; j < list->nlength;j++){
list->data[j] = list->data[j+1];
}
list->nlength--;
return false;
}
/**
* 线性表合并
*/
void unionList(SeqList *a, SeqList *b)
{
if(a->nlength + b->nlength > LISTSIZE){
return ;
}
for(int i = 0; i < b->nlength; i++){
DataType e = b->data[i];
if(locateNode(a, e) == -1){
insert(a, a->nlength, e);
}
}
}
/**
* 倒置线性表
*/
void reverse(SeqList *list)
{
for(int i = 0; i < list->nlength / 2; i++){
DataType e = list->data[i];
list->data[i] = list->data[list->nlength-i-1];
list->data[list->nlength-i-1] = e;
}
}
/**
* 输出元素
*/
void print(DataType d)
{
printf("%dn", d);
}
/**
* 遍历元素
*/
void trave(SeqList *list, void(*visitFun)(DataType))
{
for(int i = 0; i < list->nlength; i++){
visitFun(list->data[i]);
}
}
近期评论