最近终于用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语言版)
(全文完)
若非注明,均为原创文章,转载请注明: 转载自大笨兔博客
转载于:https://blog.51cto.com/dabentu/899774