数据结构-顺序表的练习

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****************************/




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值