1. /*
  2. 编译器:Dev-c++ 5.1.0
  3. 文件名:linkList3.cpp
  4. 代码版本号:1.0
  5. 时间:2015年9月24日11:34:16
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <time.h>
  11. #define ERROR 0
  12. #define OK 1
  13. #define TRUE 1
  14. #define FALSE 0
  15. #define OVERFLOW -2
  16.  
  17. typedef int Status;
  18. typedef int ElemType;
  19.  
  20. typedef struct lNode{
  21. ElemType data;
  22. struct lNode *next;
  23. }lNode,*linkList;
  24.  
  25. /*初始化建立空链表 ---测试成功*/
  26. Status initList(linkList *l){
  27. *l=(linkList)malloc(sizeof(lNode)); //产生头结点,使L指向头结点
  28. if(!*l){
  29. exit(OVERFLOW);
  30. return ERROR;
  31. }
  32. (*l)->next=NULL;
  33. return OK;
  34. }
  35.  
  36. /*判定是否为空表 ---测试成功*/
  37. bool isEmpty(linkList l){
  38. if(l->next)
  39. return FALSE;
  40. return TRUE;
  41. }
  42.  
  43. /*清空链表 ---测试成功*/
  44. Status clearList(linkList *l){
  45. linkList p=(*l)->next;
  46. linkList q;
  47. while(!p)
  48. {
  49. q=p;
  50. free(q);
  51. p=p->next;
  52. }
  53. (*l)->next=NULL;//头结点指针域为空
  54. return OK;
  55. }
  56.  
  57. /*返回L中数据元素个数 ---测试成功*/
  58. int listLength(linkList l){
  59. int i=;
  60. linkList p=l->next;
  61. while(p){
  62. //printf("listLength()函数while语句\n") ;
  63. i++;//i=1
  64. p=p->next;
  65. }
  66. return i;
  67. }
  68.  
  69. /*用e返回L中第i个数据元素的值---测试成功*/
  70. Status getElem(linkList *l,int i,ElemType *e){
  71. linkList p=(*l)->next;
  72. int j=;
  73. if(i<||i>listLength(*l))
  74. {
  75. exit(OVERFLOW);
  76. return ERROR;
  77. }
  78.  
  79. while(p&&j!=i)
  80. {
  81. p=p->next;
  82. j++;
  83. }
  84.  
  85. if(!p)
  86. return ERROR;
  87.  
  88. *e=p->data;
  89. return OK;
  90. }
  91.  
  92. /*返回L中第1个与e满足关系的数据元素的位序,若没有则返回0 ---测试成功 */
  93. int locateElem(linkList l,ElemType e){
  94. linkList p=l->next;
  95. int i=;
  96. while(p&&p->data!=e)
  97. {
  98. p=p->next;
  99. i++;
  100. }
  101. if(!p)
  102. return ;
  103. else
  104. return i;
  105. }
  106.  
  107. /*在L中第i个位置之前插入新的数据元素e,L的长度加1 ---测试成功*/
  108. Status listInsert(linkList *l,int i,ElemType e){
  109.  
  110. linkList p=(*l); //p=NULL;
  111. linkList q;
  112. int j=;
  113.  
  114. if(i<||i>(listLength(*l)+))
  115. {
  116. return ERROR;
  117. }
  118. while(p&&j<i-) // 1<2
  119. {
  120. j++; //j=2
  121. p=p->next;//p 第2个
  122. }
  123.  
  124. q=(linkList)malloc(sizeof(lNode));
  125. q->data=e; //q->data=5;
  126. q->next=p->next;//q->next=NULL
  127. p->next=q;//p->next=q
  128. return OK;
  129. }
  130.  
  131. /*删除L的第i个数据元素,并用e返回其值,L的长度减1 ---测试成功*/
  132. Status deleteElem(linkList *l,int i,ElemType *e){
  133. linkList p=(*l)->next;
  134. int j=;
  135. if(i<||i>listLength(*l))
  136. {
  137. return ERROR;
  138. }
  139. while(p&&j<i-) //j指向第8个元素
  140. {
  141. j++;
  142. p=p->next;
  143. }
  144. if(!p)
  145. return ERROR;
  146. else{
  147. linkList q=p; //q指向第8个元素
  148. *e=q->next->data; //第9个元素的data赋给*e
  149. p->next=p->next->next;//第8个元素下一个是第10个元素
  150. free(q->next);
  151. return OK;
  152. }
  153. }
  154.  
  155. /*依次对L的每个数据元素输出---测试成功 */
  156. Status listTraverse(linkList *l){
  157. linkList p=(*l)->next;
  158. int j=;
  159.  
  160. while(p)
  161. {
  162. printf("第%d个结点的数据为%d\n",j,p->data);
  163. p=p->next;
  164. j++;
  165. }
  166. return OK;
  167.  
  168. }
  169.  
  170. /*随机产生n个元素的值,建立带表头结点的单链线性表L(头插法)---测试成功*/
  171. Status createListHead(linkList *l,int n)
  172. {
  173. srand(time(NULL));
  174. linkList q;
  175. for(int i=;i<=n;i++){
  176. q=(linkList)malloc(sizeof(lNode));
  177. q->data=rand()%+;
  178. q->next=(*l)->next;
  179. (*l)->next=q;
  180. }
  181. return OK;
  182. }
  183.  
  184. /*随机产生n个元素的值,建立带表头结点的单链线性表L(尾插法)---测试成功*/
  185. Status createListTail(linkList *l, int n)
  186. {
  187. srand(time(NULL));
  188. linkList q;
  189. linkList tail=(*l);
  190. for(int i=;i<=n;i++){
  191. q=(linkList)malloc(sizeof(lNode));
  192. q->data=rand()%+;
  193. q->next=NULL;
  194. tail->next=q;
  195. tail=tail->next;
  196. }
  197. return OK;
  198. }
  199.  
  200. int main(){
  201. ElemType e;//节点的数据data
  202. linkList L;
  203. initList(&L);
  204. if(isEmpty(L))
  205. printf("循环赋值前是空表\n");
  206. else
  207. printf("循环赋值前不是空表\n");
  208. createListTail(&L,);
  209.  
  210. printf("链表长度为%d\n",listLength(L));
  211. listTraverse(&L);
  212. int n;
  213. printf("请输入要删除的元素位序:");
  214. scanf("%d",&n);
  215. deleteElem(&L,n,&e);
  216. printf("删除第%d个元素的值为%d\n",n,e);
  217. printf("删除后链表的长度为%d",listLength(L));
  218. return ;
  219. }

线性表链式存储方式的C语言实现的更多相关文章

  1. 线性表链式存储设计与实现 - API实现

    基本概念 链式存储定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息. 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以 ...

  2. 【C语言--数据结构】线性表链式存储结构

    直接贴代码 头文件 #ifndef __LINKLIST_H__ #define __LINKLIST_H__ typedef void LinkList; typedef struct _tag_L ...

  3. 数据结构(C语言版)---线性表链式存储表示

    1.单链表:线性表的链式存储. 1)特点:用一组任意的存储单元存储数据元素(存储单元可以连续,也可以不连续),逻辑上相邻的元素存储位置不一定相邻. 2)结点包括两个域:数据域(存储数据元素信息).指针 ...

  4. 02线性表链式存储_LinkList--(线性表)

    #include "stdio.h" #include "string.h" #include "ctype.h" #include &qu ...

  5. 数据结构C语言实现系列——线性表(线性表链接存储(单链表))

    #include <stdio.h>#include <stdlib.h>#define NN 12#define MM 20typedef int elemType ;/** ...

  6. guoshiyv 数据结构与算法2-1 线性链式存储

    线性链式存储:   包含两部分:1.存储的单个元素 2.指针,指向下一个的地址 typedef struct() { ElementType Data; struct Node *Next; }Lis ...

  7. C语言实现线性表(链式存储方式)

    #include <stdio.h> #include <stdlib.h> //提供malloc()原型 typedef struct LNode *List; typede ...

  8. 队列的链式存储方式的实现(Java语言描述)

    链队列的结构示意图: 先进先出. QueueInterface.java//操作方法接口 package 队列的实现; public interface QueueInterface { public ...

  9. 栈的链式存储方法的C语言实现

    /* 编译器:Dev-c++ 5.4.0 文件名:linkStack.cpp 代码版本号:1.0 时间:2015年10月15日18:56:06 */ #include <stdio.h> ...

随机推荐

  1. HelloSilverlight

    一:输入姓名并选中一个日期,将在下面显示 二:XAML代码 <UserControl x:Class="HelloSilverlight.MainPage" xmlns=&q ...

  2. Delphi 托盘程序实现 转

    unit MainUnit; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F ...

  3. POJ 1700 坐船过河问题

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82974#problem/E 解题思路:当n>=4,假设n个人单独过河所需 ...

  4. UVAlive3713 Astronauts(2-SAT)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18511 [思路] 2-SAT. 设分得A或B类任务为1 C类任务为 ...

  5. Spring的MVC控制器返回ModelMap时,会跳转到什么页面?

    控制器中的方法如下: @RequestMapping("/person/personDisplay") public ModelMap defaultHandler() { Sys ...

  6. selenium webdriver python 元素定位

    总结   定位查找时,返回查找到的第一个match的元素.如果找不到,则 raise NoSuchElementException   单个元素定位: find_element_by_idfind_e ...

  7. 纯CSS无hacks的跨游览器多列布局

    利用纯CSS创建一个等高多列的布局并不件易事,本教程将着重分析出现在多列布局的多个问题,然后为大家等来一个简单全游览器通吃的解决方法,不使用图片,脚本,CSS hacks并在最严格的XHTML 规范中 ...

  8. 【解决】hive动态添加partitions不能超过100的问题

    Author: kwu [解决]hive动态添加partitions不能超过100的问题,全量动态生成partitions超过100会出现例如以下异常: The maximum number of d ...

  9. 大数据笔记04:大数据之Hadoop的HDFS(基本概念)

    1.HDFS是什么? Hadoop分布式文件系统(HDFS),被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点. 2.HDFS ...

  10. linux nohup命令

    nohup 命令 用途:不挂断地运行命令.如果你正在执行一个job,并且你希望在退出帐户/关闭终端之后继续运行,可以使用nohup命令.nohup就是不挂起的意思( no hang up). 语法:n ...