最近终于用C语言实现了链表的例程。代码如下:

[code lang="js"]
#include <stdio.h>
#include <stdlib.h>

typedef struct NODE Node;
typedef Node *pNode;
typedef pNode Position;
typedef pNode List;
typedef int Element;
struct NODE{
	Element key;
	pNode next;
};
//创建一个链表 返回表头指针
List createList()
{
	pNode header = NULL;
	if((header = (pNode)malloc(sizeof(Node))) != NULL){
		header->next = NULL;
		header->key = 0;
		return header;
	}
	else{
		printf("Create List failed");
		return NULL;
	}
}
//测试空表
int isEmpty(List header)
{
	return NULL == header->next;
}
//测试是否到表尾
int isLast(Position p)
{
	return NULL == p->next;
}
//find例程,找到返回位置,否则返回NULL
Position findElement(List header,Element key)
{
	Position p;
	p = header->next;
	while(p->next != NULL && p->key != key)
		p = p->next;
	return p;
}
//找到key元素位置的前一个位置
Position findPrevious(List header,Element key)
{
	Position p;
	p = header;
	while(p->next != NULL && p->next->key != key)
		p = p->next;
	return p;
}
void deleteElement(List header,Element key)
{
	Position p,temp;
	p = findPrevious(header,key);
	if(!isLast(p)){//假设使用表头 找到了key,现在删除它
		temp = p->next;
		p->next= temp->next;
		free(temp);
	}

}
//向链表插入元素,在位置p之后
int insertElement(List header,Position p,Element key)
{
	Position temp;
	temp = (Position)malloc(sizeof(Node));
	if(NULL == temp)
		return 0;
	temp->next = p->next;
	temp->key= key;
	p->next = temp;
}
//向链表尾插入元素
int insertLast(List header,Element key)
{
	Position p,temp;
	temp = (Position)malloc(sizeof(Node));
	if(NULL == temp)
		return 0;
	p = header;
	while(p != NULL && p->next!= NULL)
		p = p->next;
	temp->next= NULL;
	temp->key= key;
	p->next= temp;
}
void printList(List header)
{
	Position p;
	p = header->next;
	while(p != NULL){
		printf("%d ",p->key);
		p = p->next;
	}
}
int main()
{
	pNode header = NULL;
	Position p;
	header = createList();
	insertLast(header,4);
	insertLast(header,54);
	insertLast(header,5);
	insertLast(header,3);
	//上面是初始的链表
	//测试插入函数
	p = findElement(header,54);
	insertElement(header,p,8);
	//删除元素
	deleteElement(header,3);
	printList(header);
}
[/code]

想了自己学了这么久的程序,连链表都没有自己实现过。就写了一个,本以为会有数不清的错误,但是这次竟然只有一个小小的错误,一下解决,成寻正确运行了。高兴!

程序参照 《数据结构与算法分析》(c语言版)

(全文完)

若非注明,均为原创文章,转载请注明: 转载自大笨兔博客