您的位置:首页 > 编程语言 > C语言/C++

C语言链表练习

2012-06-15 19:26 190 查看
最近终于用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);
}

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

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

(全文完)

若非注明,均为原创文章,转载请注明: 转载自大笨兔博客
本文出自 “大笨兔博客” 博客,请务必保留此出处http://dabentu.blog.51cto.com/4779949/899774
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: