c实现单链表

/*
 * LinkList.c
 *
 *  Created on: 2016年9月4日
 *      Author: Edwards
 */

#include <stdlib.h>
#include"LinkList.h"
const int null = 0;

void setnull(struct LNode **p) {
	*p = null;
}

int length(struct LNode **p) {
	int n = 0;
	struct LNode *q = *p;
	while (q != null) {
		n++;
		q = q->next;
	}
	return (n);
}

ElemType get(struct LNode **p, int i) {
	int j = 1;
	struct LNode *q = *p;
	while (j < i && q != null) {
		q = q->next;
		j++;
	}
	if (q != null) {
		return (q->data);
	} else {
		printf("位置参数不正确!\n");
		return NULL;
	}
}

int locate(struct LNode **p, ElemType x) {
	int n = 0;
	struct LNode *q = *p;
	while (q != null && q->data != x) {
		q = q->next;
		n++;
	}
	if (q == null)
		return (-1);
	else
		return (n + 1);
}

void insert(struct LNode **p, ElemType x, int i) {
	int j = 1;
	struct LNode *s, *q;
	s = (struct LNode *) malloc(sizeof(struct LNode));
	s->data = x;
	q = *p;
	if (i == 1) {
		s->next = q;
		*p = s;
	} else {
		while (j < i - 1 && q->next != null) {
			q = q->next;
			j++;
		}
		if (j == i - 1) {
			s->next = q->next;
			q->next = s;
		} else
			printf("位置参数不正确!\n");
	}
}

void delete(struct LNode **p, int i) {
	int j = 1;
	struct LNode *q = *p, *t;
	if (i == 1) {
		t = q;
		*p = q->next;
	} else {
		while (j < i - 1 && q->next != null) {
			q = q->next;
			j++;
		}
		if (q->next != null && j == i - 1) {
			t = q->next;
			q->next = t->next;
		} else
			printf("位置参数不正确!\n");
	}
	if (t != null)
		free(t);
}

void display(struct LNode **p) {
	struct LNode *q;
	q = *p;
	printf("单链表显示: ");
	if (q == null)
		printf("链表为空!");
	else if (q->next == null)
		printf("%d\n", q->data);
	else {
		while (q->next != null) {
			printf("%d->", q->data);
			q = q->next;
		}
		printf("%d", q->data);
	}
	printf("\n");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值