#include <stdio.h>
#define SEQ_SIZE 10
// 声明数据节点
struct seq_node{
int data;
};
// 遍历显示顺序表所有有效数据
void seq_show(struct seq_node *seq_list);
// 将该正数存放到顺序表中
void seq_add(int new_data, struct seq_node *seq_list);
// 将该数从顺序表中删除
void seq_del(int del_data, struct seq_node *seq_list);
// 当前数据总数
int g_sum=0;
int main()
{
// 1. 初始化顺序表(选用栈空间,结构体数组)
struct seq_node seq_list[SEQ_SIZE] = {0};
// 如果使用堆空间(实际使用与栈空间的数组是一模一样的!)
// struct seq_node *seq_list = calloc(SEQ_SIZE, sizeof(struct seq_node));
// 2.数据操作
int cmd;
while(1)
{
printf("Pls Input: ");
scanf("%d", &cmd); while(getchar()!='\n');
if(cmd>0)
seq_add(cmd, seq_list); // 将该正数存放到顺序表中
else if(cmd<0)
seq_del(-cmd, seq_list); // 将该数从顺序表中删除
seq_show(seq_list); // 遍历显示顺序表所有有效数据
}
return 0;
}
// 遍历显示顺序表所有有效数据
void seq_show(struct seq_node *seq_list)
{
int i;
for(i=0; i<g_sum; i++)
printf("%d ", seq_list[i].data);
printf("\n");
}
// 将该正数存放到顺序表中
void seq_add(int new_data, struct seq_node *seq_list)
{
// 0.判断当前数据总数是否已满。(限制最大长度)
if(g_sum >= SEQ_SIZE)
{
printf("SEQ_list FULL!!!!\n");
return;
}
// 1.将新数据放入指定位置
seq_list[g_sum].data = new_data;
// 2.当前数据总数++
g_sum++;
}
// 将该数从顺序表中删除
void seq_del(int del_data, struct seq_node *seq_list)
{
// 0.判断当前顺序表是否为空?提示并结束
if(g_sum == 0)
{
printf("SEQ_list Empty!!!!\n");
return;
}
// 1.循环逐个比对待删除数据del_data
int pos;
for(pos=0; pos<g_sum; pos++)
{
// 如果找到,提前跳出循环,记录下标pos
if(seq_list[pos].data == del_data)
break;
}
// 如果for循环正常结束,说明没找到。直接提示并结束
if(pos == g_sum)
{
printf("Not Found!\n");
return;
}
// 2.将后面的数据逐个向前覆盖。
int i;
// for(i=pos; i<=g_sum-2; i++)
for(i=pos; i<g_sum-1; i++)
{
// 如果不清楚他们的覆盖流程,可以添加printf打印语句,跟踪for循环。
// printf("2: %d = %d\n", seq_list[i].data, seq_list[i+1].data);
seq_list[i].data = seq_list[i+1].data;
}
// 3.当前数据总数g_sum--
g_sum--;
}