单链表实现!
来源:互联网 发布:openwrt 安装软件 编辑:程序博客网 时间:2024/05/18 00:58
linklist.h
#ifndef LINKLIST_H_INCLUDED#define LINKLIST_H_INCLUDEDtypedef int ElementType;struct linklist;typedef struct linklist *LinkList;typedef LinkList Position;/**< 函数如无返回值,且须改变参数值时,课使用二级指针 *//**< 有返回值使用以及指针即可,传值调用即体现在此,指针亦不例外 */LinkList CreatLinkList(LinkList L,int N); /**< 创建链表,长度为N,函数如无返回值参数需用二级指针 */void PrintLinkList(LinkList L); /**< 打印链表 */LinkList DeleteLinkList(LinkList L); /**< 销毁整表 */int IsEmpty(LinkList L); /**< 表是否为空 */int IsLast(Position P, LinkList L); /**< 位置P是否为最后 */Position Find(ElementType X, LinkList L); /**< 查找元素X的位置 */Position FindPrevious(ElementType X, LinkList L); /**< 查找元素X之前的位置 */LinkList Delete(ElementType X, LinkList L); /**< 删除元素X */LinkList Insert(ElementType X, LinkList L); /**< 插入元素X */#endif // LINKLIST_H_INCLUDED
linklist.c
#include <stdio.h>#include <malloc.h>#include <time.h>#include <math.h>#include <io.h>#include "linklist.h"struct linklist{ ElementType data; LinkList next;}; /**< 创建链表 */LinkList CreatLinkList(LinkList L,int n){ LinkList P; int i; L=(LinkList)malloc(sizeof(struct linklist)); if(L==NULL) printf("out of space!!!"); L->next =NULL; for(i=0;i < n;i++) { P=(LinkList)malloc(sizeof(struct linklist)); P->data=rand()%100+1; P->next =L->next; L->next =P; } return L;} /**< 打印链表 */void PrintLinkList(LinkList L){ Position P; P=L->next; while(P!=NULL) { printf("%d\t",P->data); P=P->next; }}/**< 销毁整表 */LinkList DeleteLinkList(LinkList L){ LinkList temp,P; P=L->next; while(P) { temp=P->next; /**< temp=P;free(P);P=temp->next; this is wrong, temp must point to the next node*/ free(P); P=temp; } L->next =NULL; return L;} /**< 表是否为空 */int IsEmpty(LinkList L){ return L->next==NULL;} /**< 位置P是否为最后 */int IsLast(Position P, LinkList L){ return P->next ==NULL;} /**< 查找元素X的位置 */Position Find(ElementType X, LinkList L){ LinkList P; P=L->next; while(P != NULL && P->data !=X) { P=P->next; } return P;} /**< 查找元素X之前的位置 */Position FindPrevious(ElementType X, LinkList L){ LinkList P; P=L; /**< P=L->next;如此写不能正确删除首位数据 */ while(P ->next!= NULL && P->next->data !=X) { P=P->next; } return P;} /**< 删除元素X */LinkList Delete(ElementType X, LinkList L){ Position P,temp; P=FindPrevious(X,L); temp=P->next; P->next =temp->next; free(temp); return L;} /**< 插入元素X */LinkList Insert(ElementType X, LinkList L){ Position P,temp; temp=(LinkList)malloc(sizeof(struct linklist)); P=L->next; temp->data =X; temp->next=P; L->next =temp; return L;}
main.c
#include <stdio.h>#include <stdlib.h>#include "linklist.c"int main(){ LinkList L; L=(LinkList)malloc(sizeof(struct linklist)); L=CreatLinkList(L,12); PrintLinkList(L); putchar(10); /**< printf('\n');这一句为何会警告? */ printf("\n"); /**< 该函数参数为指针,需用双引号 */ L=Delete(46,L); PrintLinkList(L); putchar(10); L=Insert(17,L); PrintLinkList(L); DeleteLinkList( L); getchar(); return 0;}个别地方还不是太完整。
- 单链表实现
- 单链表实现
- 单链表实现!
- 单链表实现
- 单链表实现
- 单链表实现
- 单链表实现
- 单链表实现
- 单链表实现
- 单链表实现
- 单链表实现
- 【算法数据结构Java实现】Java实现单链表
- 单链表的基础实现
- 数据结构-单链表的实现
- c#实现单链表
- 单链表(C#)实现
- 循环单链表的实现
- 数据结构---单链表实现(源码)
- JRE System Library
- 按键扫描1
- android应用程序安装后自动打开
- http
- Linux下命令无法使用
- 单链表实现!
- 再谈性能测试的发展方向
- R安装 Rmysql 失败解析;
- 做一名合格的女程序员
- ZooKeeper典型应用场景
- 验证码生成函数
- SQL数据库中的表出现相同记录该怎么删除?
- c语言多维指针笔记
- 二叉树相关操作之一