#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
#define maxsize 128
typedef struct sequeue_list //链表定义
{
int data[maxsize];
int last;
}sqlist,*sqlink;
sqlink init_list(void) //链表初始化
{
sqlink L = (sqlink)malloc(sizeof(sqlist));
L->last = -1;
return L;
}
bool is_empty(sqlink L) //判断是否为空
{
return (L->last ==-1);
}
bool is_full(sqlink L) //判断是否为满
{
return (L->last == maxsize -1);
}
bool insert(sqlink L,int data) //在链表末尾插入
{
if(is_full(L))
return false;
else
L->data[++(L->last)] = data;
return true;
}
bool sort(sqlink L) //冒泡排序
{
int i,j,temp,len;
len = length(L);
for(i=0;i<len-1;i++){
for(j=0;j<len-i-1;j++){
if(L->data[j] > L->data[j+1]){
temp = L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = temp;
}
}
}
return true;
}
bool insert_data(sqlink L,int data) //插入数据
{
int i,j;
int len = length(L);
for(i=0;i<len;i++){
if(L->data[i]>data){
L->last++;
for(j=L->last;j>=i;j--){
L->data[j] = L->data[j-1];
}
L->data[i] = data;
}
}
}
int length(sqlink L) //获取长度
{
return L->last+1;
}
void show_data(sqlink L) //显示列表
{
int i;
int len = length(L);
for(i=0;i<len;i++)
fprintf(stderr,"data[%d]:%d/n",i,L->data[i]);
}
bool delete(sqlink L,int data) //删除数据操作
{
int i,j;
int len = length(L);
if(is_empty(L))
return false;
else
for(i=0;i<len;i++){
if(data == L->data[i]){
for(j=i;j<len;j++)
L->data[j] = L->data[j+1];
}
}
L->last--;
return true;
}
int main(void)
{
sqlink L;
L = init_list();
int data,ret,len;
int i,k;
bool flag = false;
fprintf(stderr,"input:/n");
scanf("%d",&data);
while(data != -1){
insert(L,data);
show_data(L);
scanf("%d",&data);
}
sort(L);
fprintf(stderr,"insert:/n");
scanf("%d",&data);
insert_data(L,data);
show_data(L);
fprintf(stderr,"delete:/n");
scanf("%d",&data);
len = length(L);
for(k=0;k<len;k++){
if(L->data[k] == data){
delete(L,data);
flag = true;
}
else
flag = false;
}
if(flag == true)
fprintf(stderr,"delete succssful!/n");
else
fprintf(stderr,"delete false!/n");
show_data(L);
return 0;
}