顺序表
/*练习:实现从键盘输入整数, 顺序表里面,按增长方式进行存储(输入正整数,插入数据,输入负整数,删除数据. 输入3 插入数据3 到顺序表里面;输入-3,把3数据从顺序顺删除)。
数据结构:指数据之间的相互关系
包括:
1. 逻辑结构:表示数据运算之间的抽象关系
分:线性结构 和非线性结构
2. 存储结构:逻辑结构在计算机实现
分:顺序存储方法、链式存储方法、索引存储方法、散列存储方法
3、数据运算:对数据进行的操作。插入/删除/查找/排序
线性表:这是一种逻辑结构,班级同学是线性表。特征,所有的元素都一对一关系
(数学语言:任何一个元素,有且仅有一个直接前驱节点和直接后驱节点,第一个节点没有直接直接前驱节点,最后一个节点 没有后驱节点)
使用用存储结构中的:顺序存储方法、链式存储方法
顺序存储方法:
---》顺序表:
--》1.定义顺序表/初始化顺序表/插入/删除/
#include<stdbool.h>
#include<stdlib.h>
#include<stdio.h>
#define SIZE 12
//声明
struct seqlist
{
int last;
int data[SIZE];
};
//初始化
struct seqlist *init_seqlist()
{
struct seqlist *sl = malloc(sizeof(struct seqlist));
sl->last = -1;
return sl;
}
//判断顺序表是否满
bool if_full(struct seqlist *sl)
{
return sl->last == SIZE-1;
}
//插入操作
bool inser_node(int data,struct seqlist *sl)
{
if(if_full(sl))
return false;
int i;
for(i=sl->last;i>=0;i--)
{
if(data <sl->data[i])
continue;
else break;
}
int j;
for(j = sl->last;j>i;j--)
{
sl->data[j+1] = sl->data[j];
}
sl->data[j+1] = data;
sl->last++;
return true;
}
//判断顺序表是否为空
bool if_null(struct seqlist *sl)
{
return sl->last == -1;
}
//删除操作
bool remove_node(int data,struct seqlist *sl)
{
if(if_null(sl))
return false;
//location
int i;
for(i = sl->last;i>=0;i--)
{
if(data!=sl->data[i])
continue;
else
{
printf("find failed!");
break;
}
}
int j;
for(j=i;j<=sl->last;j++)
{
sl->data[j] = sl->data[j+1];
// printf("%d",sl->data[j-1]);
}
sl->last--;
return true;
//move node
}
//将数据打印出来
void show(struct seqlist *sl)
{
int i;
for(i=0;i<=sl->last;i++)
printf("%d\t",sl->data[i]);
printf("\n");
}
int main()
{
struct seqlist *sl = init_seqlist();
int n;
while(1)
{
scanf("%d",&n);
if(n>0)
{
if(inser_node(n,sl))
show(sl);
}
else if(n<0)
{
if(remove_node(-n,sl))
show(sl);
else
printf("remove failed!");
}
}
return 0;
}