C语言实现线性表(链式存储方式)
2018-12-04 07:12:37来源:博客园 阅读 ()
#include <stdio.h> #include <stdlib.h> //提供malloc()原型 typedef struct LNode *List; typedef int ElementType; //定义数据结构的自定义名称 struct LNode{ ElementType Data; //数据域 List Next; //指针域 }; struct LNode L; List PtrL; int Length(List PtrL) //链表头指针 /*表长*/ { List p = PtrL; //临时的指针 p 指向表的第一个节点 int j = 0; //计数器作用 while(p) //遍历单向链表 { p = p->Next; j++; //当前p指向的是第j个节点 } return j; } List FindKth(int K,List PtrL) /*查找-序号*/ { List p = PtrL; int i = 1; while (p!= NULL && i < K) { p = p->Next; i++; } if (i==K) { return p; //找到K位置,返回指针 } else { return NULL; //未找到,返回空 } } List Find(ElementType X,List PtrL) /*查找-值*/ { List p = PtrL; while (p != NULL && p->Data != X) { p = p->Next; } return p; //找到X,返回指针,未找到X,返回NULL } List Insert(ElementType X, int i, List PtrL) /*插入*/ //步骤: 1、 构造一个新结点,用s指向 // 2、 找到链表的第i-1个结点,用p指向 // 3、 然后修改指针,插入结点 // s-Next指向 p->Next,p->Next指向s, { List p , s; if(i == 1) //表头插入结点 { s = (List )malloc(sizeof(struct LNode)); //申请结点空间 s->Data = X; //填充结点 s->Next = PtrL; return s; } p = FindKth(i-1, PtrL); //查找第i-1个结点 if(p==NULL) { printf("参数%d错误",i); return NULL; //i-1结点不存在 } else { s = (List)malloc(sizeof(struct LNode)); //申请结点空间 s->Data = X; s->Next = p->Next; p->Next = s; return PtrL; } } List Delete(int i, List PtrL) /*删除*/ { List p ,s; if(i==1) //删除表的第一个节点 { s = PtrL; //s指向第一个节点 if (PtrL != NULL) { PtrL = PtrL->Next; //从链表中删除 } else { return NULL; } free(s); //释放s return PtrL; } p = FindKth(i-1 , PtrL); //查找第i-1个结点 if (p == NULL) { printf("%d 节点不存在",i-1); return NULL; } else if (p ->Next == NULL) { printf("%d 节点不存在",i); return NULL; } else { s = p->Next; //s 指向第i个结点 p->Next = s->Next; //从链表中删除 free(s); //释放被删除的结点 return PtrL; } } int main() { int j; int i =1; List p; j=Length(PtrL); //计算长度 printf("当前长度:%d\n",j); PtrL=Insert(5,1,PtrL); //在表头插入结点 p=FindKth(1,PtrL); printf("查找头结点的值:%d\n",p->Data); //按照序号查找并打印结果 p=Find(5,PtrL); printf("查找数值5:%d\n",p->Data); //按照值查找并打印结果 printf("插入数值3\n"); Insert(3,2,PtrL); //插入操作 p=Delete(1,PtrL); printf("删除头结点后,当前头结点数值:%d\n",p->Data); //删除头结点 j=Length(&L); //计算长度 printf("当前长度:%d\n",j); return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C语言程序结构 2020-05-31
- C++冒泡排序 (基于函数模板实现) 2020-05-31
- opencv-12-高斯滤波-双边滤波(附C++代码实现) 2020-05-10
- 二叉排序树 2020-05-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash