C语言中malloc函数:该函数的具体
数据结构的练习0
//顺序表的练习
/*
1.输入正数添加到顺序表中
2.输入负数删除在顺序表对应的正数(相反数)
3.并进入顺序表后,前面是小数后面是大数
*/
#include<stdio.h>
#include<stdlib.h>
#define SIZE 30
typedef struct list
{
int data[SIZE];
int last;
}* List;
//顺序表初始化
List init(void)
{
List p=malloc(sizeof(struct list));
if(p == NULL)
{
printf("向堆申请空间错误!\n");
return NULL;
}
p->last=-1; //初始化
}
//顺序表插入操作
int insert_list(int dat,List sl)
{
int i,tmp;
if(sl->last >= SIZE-1) //顺序表已满
{
printf("顺序表已满!\n");
return -1; //插入失败的标志
}
for(i=0;i <= sl->last;i++)
{
if(dat > sl->data[i]) //????
{
for(tmp=sl->last;tmp >= i;tmp--) //这里要等于
{
sl->data[tmp+1]=sl->data[tmp]; //后移
}
sl->data[i]=dat; //插入数据
break;
}
}
sl->last++; //顺序表长度加一
return 0; //操作成功标志
}
//遍历顺序表
void show_list(List sl)
{
if(sl->last <= 0)
{
printf("顺序表为空\n");
}
int i;
for(i=sl->last;i >=0 ;i--)
{
printf("%d\t",sl->data[i]);
}
printf("\n\n");
}
//删除顺序表的操作
int remove_data(int dat,List sl)
{
if(sl->last <= 0 )
{
printf("该顺序表为空!\n");
return -1;
}
int i,j;
for(i=0;i <= sl->last;i++)
{
if(sl->data[i]==(-dat))
{
for(j=i;j <= sl->last;j++) //有个bug,最后一个元素和倒数第二个元素的值是一样的?????
{
sl->data[i] = sl->data[i+1]; //前移
}
sl->data[sl->last+1]=0; //将最后一个初始化
sl->last--; //删除一个数据 让它遍历不到
return 0; //删除成功标志
}
}
printf("没有该数据\n");
return -2; //操作失败的标志
}
int main()
{
List sl=init(); //初始化一个顺序表
int ch;
while(1)
{
printf("======================");
printf("====\n(1)正数插入操作\n(2)负数删除操作\n(3)0退出操作\n====\n");
scanf("%d",&ch);
if(ch>0)
{
insert_list(ch,sl);
show_list(sl);
}else if(ch<0){
remove_data(ch,sl);
show_list(sl);
}else{
printf("退出输入\n");
break;
}
}
printf("***********正常退出*************\n");
free(sl);
return 0;
}
/********************************可能有bug****************************/