C语言链表操作

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
	
typedef struct entry
{
	int num;
	char name[20];
	char sex[5];
	int age;
	struct entry *next;
}entry_s;

typedef struct entry_list
{
	int index;
	entry_s *entry_head;	
}entry_list_s;

entry_list_s *entry = NULL;

int add_entry(entry_s *tmp_entry)
{
	entry_s *new_entry;
	entry_s *entry_ptr = entry->entry_head;
	if(NULL == tmp_entry)
	{
		printf("entry is NULL!\n");
		return -1;
	}
	
	new_entry = (entry_s *)malloc(sizeof(entry_s));
	memcpy(new_entry, tmp_entry, sizeof(entry_s));
	entry->index++;
	
	if(NULL == entry_ptr)
	{
		entry->entry_head = new_entry;
		new_entry->next = NULL;
		return 0;
	}
	
	while(NULL != entry_ptr->next)
	{
		entry_ptr = entry_ptr->next;
	}
	
	entry_ptr->next = new_entry;
	new_entry->next = NULL;
	
	return 0;
}

void print_entry(void)
{
	entry_s *it_entry = entry->entry_head;
	while(NULL != it_entry)
	{
		printf("==============================\n");
		printf("num:  %d\n", it_entry->num);
		printf("name: %s\n", it_entry->name);
		printf("sex:  %s\n", it_entry->sex);
		printf("age:  %d\n", it_entry->age);
		printf("==============================\n\n");
		it_entry = it_entry->next;
	}
	
	printf("total num: %d\n", entry->index);
	return;
}

void delet_entry(int num)
{
	entry_s *entry_p = entry->entry_head;
	entry_s *entry_q = entry->entry_head->next;
	
	if((NULL != entry_p) && (entry_p->num == num))
	{
		entry->entry_head = entry_q;
		free(entry_p);
		entry_p = NULL;
		entry->index--;
		return;
	}
	
	while(NULL != entry_q)
	{
		if(entry_q->num == num)
		{
			entry_p->next = entry_q->next;
			free(entry_q);
			entry_q = NULL;
			entry->index--;
			return;
		}
		else
		{
			entry_p = entry_q;
			entry_q = entry_q->next;
		}
	}
	return;
}

int main()
{
	entry_s inner_entry;
	printf("main\n");
	entry = (entry_list_s *)malloc(sizeof(entry_list_s));
	entry->index = 0;
	entry->entry_head = NULL;
	
	inner_entry.num = 0;
	strcpy(inner_entry.name, "aaaaa");
	strcpy(inner_entry.sex, "male");
	inner_entry.age = 15;	
	add_entry(&inner_entry);
	
	inner_entry.num = 1;
	strcpy(inner_entry.name, "bbbbb");
	strcpy(inner_entry.sex, "male");
	inner_entry.age = 19;
	add_entry(&inner_entry);
	
	inner_entry.num = 2;
	strcpy(inner_entry.name, "ccccc");
	strcpy(inner_entry.sex, "female");
	inner_entry.age = 41;
	add_entry(&inner_entry);
	
	inner_entry.num = 3;
	strcpy(inner_entry.name, "ddddd");
	strcpy(inner_entry.sex, "female");
	inner_entry.age = 23;
	add_entry(&inner_entry);
	//print_entry();
	delet_entry(0);
	print_entry();
	free(entry);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值