顺序表数据结构
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 顺序表
- 一 什么是顺序表
- 二 顺序表的组成结构
- 顺序表的初始化
- 顺序表的销毁
- 顺序表的头插
- 顺序表的头删
- 顺序表的尾插
- 顺序表的尾删
- 在某一个节点中插入数据
- 在某一个节点中删除数据
- 修改数据
#include"pli.h"
Plist create_list()
{
Plist L = (list*)malloc(sizeof(list));
if (L == NULL)
{
printf("创建失败");
return NULL;
}
L->len = 0;
cout << "创建成功";
return L;
}
int input_list(Plist L)
{
int n;
printf("请输入学生个数");
cin >> n;
for (int i = 0; i < n; i++)
{
printf("请输入学号");
cin >> L->data[i].id;
printf("请输入名字");
cin>> L->data[i].name;
printf("请输入专业");
cin>> L->data[i].major;
printf("请输入年龄");
cin>> L->data[i].age;
L->len++;
}
return 0;
}
int full(Plist L)
{
if (L->len == MAX)
{
return 1;
}
else
return 0;
}
int insert_list(Plist L, int pos, student e)
{
int sub = pos - 1;
if (sub<0||sub>L->len||L->len==0||full(L))
{
printf("插入失败");
return 0;
}
for (int i = L->len - 1; i >= sub; i--)
{
L->data[i + 1] = L->data[i];
}
L->data[sub] = e;
L->len++;
printf("插入成功");
return 0;
}
int output_stu(Plist L)
{
for (int i = 0; i < L->len; i++)
{
printf("学号");
printf("%d\n", L->data[i].id);
printf("姓名");
printf("%s\n", L->data[i].name);
printf("专业");
printf("%s\n", L->data[i].major);
printf("年纪");
printf("%d\n", L->data[i].age);
}
return 0;
}
int delete_list(Plist L, int pos)
{
int sub = pos - 1;
if (sub < 0 || sub>L->len - 1 || L == NULL || full(L))
{
printf("删除失败");
return -1;
}
for (int i = sub; i < L->len - 1; i++)
{
L->data[i] = L->data[i + 1];
}
L->len--;
return 0;
}
int serch_list(Plist L, int pos)
{
int sub=pos - 1;
if (sub<0 || sub>L->len - 1 || L == NULL || L->len == 0)
{
printf("寻找失败");
return -1;
}
printf("%d\t%s\t%s\t%d\n", L->data[sub].id, L->data[sub].name, L->data[sub].major, L->data[sub].age);
return 0;
}
int change_list(Plist L, int pos, student f)
{
int sub = pos - 1;
if (sub<0 || sub>L->len - 1 || L == NULL || L->len == 0)
{
printf("寻找失败");
return -1;
}
L->data[sub] = f;
return 0;
}
int insert_first(Plist L, student f)
{
insert_list(L, 1, f);
return 0;
}
int insert_rear(Plist L, student f)
{
insert_list(L, L->len+1, f);
return 0;
}
int repeat(Plist L)
{
for(int i=0;i<L->len;i++)
for (int j = i; j < L->len; j++)
{
if (strcmp(L->data[i].name, L->data[j].name) == 0)
{
delete_list(L, j + 1);
j--;
}
}
return 0;
}