#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#define N 100
typedef int data_t;
//变量与顺序表结构定义
typedef struct {
data_t data[N];
int n;
} sqlist;
//建立一个空的线性表
sqlist* list_create() {
sqlist* list = (sqlist*)malloc(sizeof(sqlist));
if (list == NULL) {
printf("内存分配错误\n");
return NULL;
}
list->n = -1;
return list;
}
//清空顺序表
//作用:清空线性表
int list_clear(sqlist* list)
{
if (list == NULL)
{
printf("list_clear:NULL");
return -1;
}
int len = list_length(list);
memset(list->data, '\0', sizeof(data_t) * len);
list->n = -1;
return 0;
}
//判断是否为空表
//功能:判断线性表是否为空
int list_empty(sqlist* list)
{
if (list->n == -1)
return 1;
else
return 0;
}
//获取线性表长度
int list_length(sqlist* list)
{
if (list == NULL)
{
printf("NULL");
return -1;
}
return list->n + 1;
}
//显示线性表
void list_show(sqlist* list)
{
if (list == NULL)
{
printf("NULL");
}
if (list != NULL)
{
for (int i = 0; i <= list->n; i++)
{
printf("%d ", list->data[i]);
}
}
else
{
printf("NULL\n");
}
}
//释放线性表内存空间
//功能:释放线性表内存空间
int list_free(sqlist* list)
{
if (list == NULL)
return -1;
free(list);
list = NULL;
return 0;
}
data_t list_getVal(sqlist* list, int index)
{
if (list == NULL)
printf("NULL");
return list->data[index];
}
//获取线性表元素
//功能:根据下表获取某个元素
int list_locate(sqlist* list, data_t value)
{
if (list == NULL)
return -1;
for (int i = 0; i < +list->n; i++)
{
if (list->data[i] == value)
return i;
}
return -1;
}
//头插法插入数据
int list_push_front(sqlist* list, data_t value)
{
if (list == NULL || list->n >= N - 1)
{
printf("push_front error\n");
return -1;
}
//右移
list->n++;//线性长+1
for (int i = list->n; i > 0; i--)
{
list->data[i] = list->data[i - 1];
//插入新数据
list->data[0] = value;
return 0;
}
}
//尾插法插入数据
int list_push_back(sqlist* list, data_t value)
{
if (list == NULL || list->n >= N - 1)
{
printf("backNULL ");
return -1;
}
//线性表尾插入数据
list->n++;
list->data[list->n] = value;
return 0;
}
//任意位置插入数据
int list_insert(sqlist* list, int index, data_t value)
{
if (list == NULL)
{
printf("insert: NULL ");
return -1;
}
if (index < 0 || list->n >= N - 1)
{
printf("error");
return -1;
}
else if (index > list->n)
{
list->n++;
list->data[list->n] = value;
return 0;
}
else
{
list->n++;
for (int i = list->n; i > index; i--)
{
list->data[i] = list->data[i - 1];
list->data[index] = value;
return 0;
}
}
}
//根据索引删除元素
int list_delete(sqlist* list, int index)
{
if (list == NULL || list->n == -1 || index<0 || index>list->n)
{
printf("delete error");
return -1;
}
for (int i = index; i < list->n; i++)
{
list->data[i] = list->data[i];
}
list->n--;
return 0;
}
int main() {
sqlist* mylist = list_create();
if (mylist == NULL) {
printf("创建失败");
return;
}
list_push_back(mylist, 66);
list_push_back(mylist, 100);
list_push_back(mylist, 22);
list_push_front(mylist, 12);
list_insert(mylist, 3, 76);
list_show(mylist);
list_free(mylist);
return 0;
}
数据结构与算法---线性顺序表原理及C语言实现
最新推荐文章于 2024-10-18 16:49:59 发布