线性表:单链表存储
单链表由结点构成,每个结点包括一个数据域和一个指示其直接后继位置的指针域。链表中第一个结点的存储位置叫做头指针。在单链表中可以有头结点,也可以没有,但是一定有头指针。一般,有头结点的方式处理会比较简单明了。以下程序是针对有头结点的情况。头结点的数据域可以不存储任何信息,头结点的指针域存储指向第一个结点的指针。最后一个结点的指针域指向空NULL。
/*线性表链式存储的相应代码:
1.线性表的顺序单链表存储结构代码
2.初始顺序单链表
3.读取顺序单链表元素操作
4.插入操作
5.删除操作
6.判断线性表是否为空
7.顺序单链表整表创建:头插法
8.顺序单链表整表创建:尾插法
9.顺序单链表整表删除
10.遍历顺序单链表
11.顺序单链表长度
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */
/* 1.线性表的顺序单链表存储结构代码 */
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList; /* 定义LinkList */
/* 2.初始顺序单链表 */
Status InitList(LinkList *L)
{
*L = (LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */
if(!(*L)) /* 存储分配失败 */
return ERROR;
(*L)->next = NULL; /* 指针域为空 */
return OK;
}
/* 3.读取顺序单链表元素操作 */
/* 声明一个指针p指向链表的第一个结点,初始化j从1开始;
当 j<i 时,就遍历链表,让p的指针向后移动,不断指向下一个结点,j累加1;
若到链表末端p为空,则说明第i个节点不存在;
否则查找成功,返回结点p的数据
*/
Status GetElem(LinkList L,int i,ElemType *e)
{
int j;
LinkList p;
p = L->next; /* L是头指针,指针p指向链