表内数据按顺序存放,所以每次插入都需要找到对应的位置
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <stdbool.h>
#define SIZE 10
typedef int datatype;
typedef struct list
{
datatype data[SIZE];
int last;
}*li;
li init()
{
li sl = (li)malloc(sizeof(struct list));
if(sl == NULL) //失败的原因可能是内存不够
{
printf("init list falie : %s\n",strerror(errno));
exit(0);
}
else
sl->last = -1;
return sl;
}
bool is_full(li sl)
{
return sl->last == SIZE - 1;
}
bool is_empty(li sl)
{
return sl->last == -1;
}
bool insert_num(datatype num, li sl)
{
if(is_full(sl))
{
printf("list is full\n");
return false;
}
int pos;
for(pos = 0; pos <= sl->last; pos++)//找到应该插入的位置
{
if(sl->data[pos] > num)
break;
}
int j;
for(j = sl->last + 1; j > pos; j--)//将位置空出
{
sl->data[j] = sl->data[j-1];
}
sl->data[pos] = num; //插入对应的位置
sl->last++;
return true;
}
bool remove_num(datatype num, li sl)
{
if(is_empty(sl))
{
printf("list is empty\n");
return false;
}
int pos;
for(pos = 0; pos <= sl->last; pos++) //找到要删除数的位置
{
if(sl->data[pos] == num)
break;
}
if(pos > sl->last) //如果pos大于last 表示 list中没有要删除的数
{
printf("%d not in list\n",num);
return false;
}
for(pos += 1; pos < sl->last; pos++)
{
sl->data[pos] = sl->data[pos+1];
}
sl->last--;
return true;
}
void display_list(li sl)
{
int i = 0;
for(; i <= sl->last; i++)
printf("%d ",sl->data[i]);
printf("\n");
}
int main()
{
li sl = init();
datatype num;
while(1) //输入正数 代表插入 负数代表 删除 0表示退出
{
scanf("%d",&num);
if(num > 0)
{
if(insert_num(num,sl))
{
display_list(sl);
}
}
else if(num <0)
{
if(remove_num(-num,sl))
{
display_list(sl);
}
}
else
{
break;
}
}
return 0;
}