/*
编译器:Dev-c++ 5.1.0
文件名:linkList3.cpp
代码版本号:1.0
时间:2015年9月24日11:34:16
*/ #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2 typedef int Status;
typedef int ElemType; typedef struct lNode{
ElemType data;
struct lNode *next;
}lNode,*linkList; /*初始化建立空链表 ---测试成功*/
Status initList(linkList *l){
*l=(linkList)malloc(sizeof(lNode)); //产生头结点,使L指向头结点
if(!*l){
exit(OVERFLOW);
return ERROR;
}
(*l)->next=NULL;
return OK;
} /*判定是否为空表 ---测试成功*/
bool isEmpty(linkList l){
if(l->next)
return FALSE;
return TRUE;
} /*清空链表 ---测试成功*/
Status clearList(linkList *l){
linkList p=(*l)->next;
linkList q;
while(!p)
{
q=p;
free(q);
p=p->next;
}
(*l)->next=NULL;//头结点指针域为空
return OK;
} /*返回L中数据元素个数 ---测试成功*/
int listLength(linkList l){
int i=;
linkList p=l->next;
while(p){
//printf("listLength()函数while语句\n") ;
i++;//i=1
p=p->next;
}
return i;
} /*用e返回L中第i个数据元素的值---测试成功*/
Status getElem(linkList *l,int i,ElemType *e){
linkList p=(*l)->next;
int j=;
if(i<||i>listLength(*l))
{
exit(OVERFLOW);
return ERROR;
} while(p&&j!=i)
{
p=p->next;
j++;
} if(!p)
return ERROR; *e=p->data;
return OK;
} /*返回L中第1个与e满足关系的数据元素的位序,若没有则返回0 ---测试成功 */
int locateElem(linkList l,ElemType e){
linkList p=l->next;
int i=;
while(p&&p->data!=e)
{
p=p->next;
i++;
}
if(!p)
return ;
else
return i;
} /*在L中第i个位置之前插入新的数据元素e,L的长度加1 ---测试成功*/
Status listInsert(linkList *l,int i,ElemType e){ linkList p=(*l); //p=NULL;
linkList q;
int j=; if(i<||i>(listLength(*l)+))
{
return ERROR;
}
while(p&&j<i-) // 1<2
{
j++; //j=2
p=p->next;//p 第2个
} q=(linkList)malloc(sizeof(lNode));
q->data=e; //q->data=5;
q->next=p->next;//q->next=NULL
p->next=q;//p->next=q
return OK;
} /*删除L的第i个数据元素,并用e返回其值,L的长度减1 ---测试成功*/
Status deleteElem(linkList *l,int i,ElemType *e){
linkList p=(*l)->next;
int j=;
if(i<||i>listLength(*l))
{
return ERROR;
}
while(p&&j<i-) //j指向第8个元素
{
j++;
p=p->next;
}
if(!p)
return ERROR;
else{
linkList q=p; //q指向第8个元素
*e=q->next->data; //第9个元素的data赋给*e
p->next=p->next->next;//第8个元素下一个是第10个元素
free(q->next);
return OK;
}
} /*依次对L的每个数据元素输出---测试成功 */
Status listTraverse(linkList *l){
linkList p=(*l)->next;
int j=; while(p)
{
printf("第%d个结点的数据为%d\n",j,p->data);
p=p->next;
j++;
}
return OK; } /*随机产生n个元素的值,建立带表头结点的单链线性表L(头插法)---测试成功*/
Status createListHead(linkList *l,int n)
{
srand(time(NULL));
linkList q;
for(int i=;i<=n;i++){
q=(linkList)malloc(sizeof(lNode));
q->data=rand()%+;
q->next=(*l)->next;
(*l)->next=q;
}
return OK;
} /*随机产生n个元素的值,建立带表头结点的单链线性表L(尾插法)---测试成功*/
Status createListTail(linkList *l, int n)
{
srand(time(NULL));
linkList q;
linkList tail=(*l);
for(int i=;i<=n;i++){
q=(linkList)malloc(sizeof(lNode));
q->data=rand()%+;
q->next=NULL;
tail->next=q;
tail=tail->next;
}
return OK;
} int main(){
ElemType e;//节点的数据data
linkList L;
initList(&L);
if(isEmpty(L))
printf("循环赋值前是空表\n");
else
printf("循环赋值前不是空表\n");
createListTail(&L,); printf("链表长度为%d\n",listLength(L));
listTraverse(&L);
int n;
printf("请输入要删除的元素位序:");
scanf("%d",&n);
deleteElem(&L,n,&e);
printf("删除第%d个元素的值为%d\n",n,e);
printf("删除后链表的长度为%d",listLength(L));
return ;
}

线性表链式存储方式的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. 【细说Java】Java封箱拆箱的一些问题

    1.概念 首先简单介绍一下概念性的东西: 所谓封箱:就是把基本类型封装成其所对应的包装类型: 而拆箱则恰好相反,是把包装类型转换成其所对应的基本数据类型. 如基本类型int,封箱后的包装类是Integ ...

  2. Spark SQL Table Join(Python)

    示例   Spark SQL注册“临时表”执行“Join”(Inner Join.Left Outer Join.Right Outer Join.Full Outer Join)   代码   fr ...

  3. ACM中Java的应用

    先说一下Java对于ACM的一些优点吧: (1) 对于熟悉C/C++的程序员来说Java 并不难学,两周时间基本可以搞定一般的编程,再用些时间了解一下Java库就行了.Java的语法和C++非常类似, ...

  4. HDOJ 1098 Ignatius's puzzle

    Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no choice bu ...

  5. has-a关系——多重私有继承

    #ifndef _STUDENT_H_ #define _STUDENT_H_ #include <iostream> #include <string> #include & ...

  6. 使用Windows驱动的虚拟打印机,打印Excel表格无表格线问题解决(2)

    测试: 经前天的测试,最终还是没有明显的定夺到底是驱动的问题,还是打印机的问题.但是按照可能性来排查,最明显的一点就是其他测试环境不变的情况下增加一张图片,就可以打印出表格线,我始终觉得这里是突破点, ...

  7. C#日历上显示节气、阴阳历节假日信息

    近期在做一个工作日历,想在日历上设置工作日,显示请假.加班等相关信息,显示农历日期信息(包括农历日期.节日 .节气).公历信息(节假期). 不能不说,http://www.cnblogs.com/ho ...

  8. MVC路由机制

      按照传统,在很多Web框架中(如经典的ASP.JSP.PHP.ASP.NET等之类的框架),URL代表的是磁盘上的物理文件.例如,当看到请求http://example.com/albums/li ...

  9. java:利用数组实现将古诗词纵向输出

      java:利用二维数组实现将古诗词纵向输出. 从网络上随便搜索一首古诗词,这里刻意选择句子长短不一的诗词 1.首先先把诗词放进一个二维数组中. 这里将数组类型定义成char 类型,因为将其定义为S ...

  10. windows 编程 —— 消息与参数(滚动条、键盘、鼠标)

    目录: 滚动条 键盘 鼠标 滚动条ScrollBar 发送消息:WM_VSCROLL和WM_HSCROLL 参数wParam:wParam消息参数被分为一个低字组和一个高字组.wParam的低字组是一 ...