顺序表去重

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 110
typedef struct student{
	int id;
	char name[21];
	float sco;
} stu_t;

typedef struct sqelist{
	stu_t data[N];
	int last;
} sq_t;

sq_t* CreateList(void){
	sq_t* list;
	list = malloc(sizeof(sq_t));
	if(list == NULL)
		return NULL;
	memset(list,0,sizeof(sq_t));
	list->last = -1;


	return list;
}

int InsertList(sq_t *list,int local,stu_t mydata){
	int i;
	if(list == NULL)
		return -1;
	if(list->last == N-1)
		return -1;
	if(local < 0 || local > list->last + 1)
		return -1;

	for(i = list->last;i >= local; i--)
		list->data[i+1] = list->data[i];

	list->data[local] = mydata;
	list->last++;
	return 0;
}

void DisplayList(sq_t* list){
	if(list == NULL)
		return;
	for(int i = 0;i <= list->last;i++){
		printf("%d ",list->data[i].id);
	}
	putchar(10);
}

int DeleteList(sq_t *list, int local){
	if(list == NULL)
		return -1;
	if(list->last == -1)
		return -1;
	if(local < 0 || local > list->last + 1)
		return -1;
	for(int i = local; i < list->last; i++)
		list->data[i] = list->data[i+1];
	list->last--;

	return 0;
}

int ChangeList(sq_t *list, int local,stu_t newdata){
	if(list == NULL)
		return -1;
	if(list->last == -1)
		return -1;
	if(local < 0 || local > list->last + 1)
		return -1;
	list->data[local] = newdata;

	return 0;
}

int SearchList(sq_t *list,int local,stu_t *mydata ){
	if(list == NULL)
		return -1;
	if(list->last == -1)
		return -1;
	if(local < 0 || local > list->last + 1)
		return -1;
	*mydata = list->data[local];

	return 0;
}

void DestoryList(sq_t **list){
	if(list == NULL)
		return;
	free(*list); //list里面存储的是sq_t的地址,*list代表访问sq_t的空间
	*list = NULL;
}

void Quchong(sq_t *list){
	if(list == NULL)
		return;
	stu_t s;
	for(int i = 0;i<list->last;i++)
	{
		int con = 0;	
		for(int j = i; j <=list->last;j++)
		{
			if(memcmp(list->data+i, list->data+j, sizeof(stu_t)) == 0)
			{
				//	if(list->data[i].id == list->data[j].id){
				con++;
				if(con > 1)
				{
					DeleteList(list,j);
					j--;
				}
			}
		}
	}
	DisplayList(list);
}

	int main(int argc, const char *argv[])
	{
		stu_t mydata = {0},newdata={0};
		sq_t *list;	
		list = CreateList();

		
		mydata.id = 9;
		while(mydata.id){
			InsertList(list,0,mydata);
			mydata.id--;
		}

		DisplayList(list);

		newdata.id = 4;
		ChangeList(list,2,newdata);
		newdata.id = 6;
		ChangeList(list,4,newdata);
		DisplayList(list);
	
		DeleteList(list,9);
		DisplayList(list);

		Quchong(list);

		DestoryList(&list);
		printf("%p\n",list);
		return 0;
	}

分文件编写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值