单链表(带头节点)

.h代码

#ifndef _LINKLIST_H
#define _LINKLIST_H

#include <stdio.h>
#include <string.h>
#include <malloc.h>

#define STRINGSZIE 20

typedef struct ElemType {
	int int_val;
	char char_val;
	char string_val[STRINGSZIE];
} ElemType;

typedef struct LinkList {
	ElemType data;
	struct LinkList *next;
} LinkList, *PLinkList;

// 基础功能
PLinkList InitList();
void printElem(PLinkList list);
int leng(PLinkList list);

// 增删改查功能
void addElem(PLinkList list, int index, ElemType *data);
void deleteElem(PLinkList list, int index);
void changeElem(PLinkList list, int index, ElemType *data);
int examineElem(PLinkList list, ElemType *data);


#endif

.c代码

#include "LinkList.h"

PLinkList InitList() {
	PLinkList list_head = (PLinkList)malloc(sizeof(LinkList));
	if (list_head == NULL) {
		return 0;
	}

	list_head->next = NULL;

	return list_head;
}

void addElem(PLinkList list, int index, ElemType *data) {
	if (list == NULL && data == NULL && index < 0) {
		return;
	}
	PLinkList list_temp = list;
	int i_num = 0;
	while (list_temp != NULL && (i_num < index - 1)) {
		list_temp = list_temp->next;
		i_num++;
	}
	PLinkList list_val = (PLinkList)malloc(sizeof(LinkList));
	if (list_val == NULL) {
		return;
	}
	memcpy(&list_val->data, data, sizeof(ElemType));
	list_val->next = list_temp->next;
	list_temp->next = list_val;

}

void deleteElem(PLinkList list, int index) {
	if (list == NULL && index < 1) return;
	PLinkList list_temp = list;
	int i_num = 0;
	while (list_temp != NULL && (i_num < index - 1)) {
		list_temp = list_temp->next;
		i_num++;
	}
	if (list_temp->next == NULL) return;
	PLinkList dele_elem = list_temp->next;
	list_temp->next = list_temp->next->next;

	free(dele_elem);
}

void changeElem(PLinkList list, int index, ElemType *data) {
	if (list == NULL && data == NULL && index < 1) return;
	PLinkList list_list_temp = list->next;
	int i = 0;
	while (list_list_temp != NULL) {
		if (i == index - 1) {
			list_list_temp->data.int_val = data->int_val;
			list_list_temp->data.char_val = data->char_val;
			strcpy(list_list_temp->data.string_val, data->string_val);
		}
		list_list_temp = list_list_temp->next;
		i++;
	}
}

int examineElem(PLinkList list, ElemType *data) {
	if (list == NULL && data == NULL ) return 0;
	PLinkList examine_list_temp = list->next;
	int return_examine = 0;
	while (examine_list_temp != NULL) {
		return_examine++;
		if (examine_list_temp->data.int_val == data->int_val &&
		        examine_list_temp->data.char_val == data->char_val &&
		        strcmp(examine_list_temp->data.string_val, data->string_val) >= 0) {
			return return_examine;
			return_examine = examine_list_temp->data.int_val;
		}
		examine_list_temp = examine_list_temp->next;
	}

	return 0;
}

void printElem(PLinkList list) {
	if (list == NULL) return;
	PLinkList list_temp = list->next;

	printf("{");
	while (list_temp != NULL) {
		printf("[%d-%c-%s]", list_temp->data.int_val, list_temp->data.char_val, list_temp->data.string_val);
		list_temp = list_temp->next;
	}
	printf("}\n");
}

int leng(PLinkList list) {
	if (list == NULL ) return 0;
	PLinkList list_temp = list->next;

	int list_leng = 0;
	while (list_temp != NULL) {
		list_temp = list_temp->next;
		list_leng++;
	}

	return list_leng;
}

main函数测试

int main() {
	PLinkList i = InitList();
	ElemType j;
	printf("-------------增----------------\n");
	j.int_val = 1, j.char_val = 'a', strcpy(j.string_val, "aaa");
	addElem(i, 1, &j);
	j.int_val = 2, j.char_val = 'b', strcpy(j.string_val, "bbb");
	addElem(i, 1, &j);
	j.int_val = 3, j.char_val = 'c', strcpy(j.string_val, "ccc");
	addElem(i, 1, &j);
	j.int_val = 5, j.char_val = 'e', strcpy(j.string_val, "eee");
	addElem(i, 1, &j);

	printElem(i);
	printf("LinkList length:%d\n", leng(i));
	printf("\n");

	j.int_val = 4, j.char_val = 'd', strcpy(j.string_val, "ddd");
	addElem(i, 2, &j);
	printElem(i);
	printf("LinkList length:%d\n", leng(i));

	printf("\n-------------删----------------\n");
	deleteElem(i, 2);
	printElem(i);

	printf("\n-------------改----------------\n");
	j.int_val = 0, j.char_val = 'o', strcpy(j.string_val, "ooo");
	changeElem(i, 3, &j);
	printElem(i);

	printf("\n-------------查----------------\n");
	j.int_val = 0, j.char_val = 'o', strcpy(j.string_val, "ooo");
	printf("List_Elem index:%d\n", examineElem(i, &j));


	return 0;
}

结果

-----------------------------
{[5-e-eee][3-c-ccc][2-b-bbb][1-a-aaa]}
LinkList length:4

{[5-e-eee][4-d-ddd][3-c-ccc][2-b-bbb][1-a-aaa]}
LinkList length:5

-----------------------------
{[5-e-eee][3-c-ccc][2-b-bbb][1-a-aaa]}

-----------------------------
{[5-e-eee][3-c-ccc][0-o-ooo][1-a-aaa]}

-----------------------------
List_Elem index:3

--------------------------------
Process exited after 0.03109 seconds with return value 0
请按任意键继续. . .
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值