#include <stdio.h>
#define ElemType int
//typedef int ElemType
int main(int argc, char **argv) {
printf("Hello, World!\n");
//单链表的定义
typedef struct LNode{
ElemType data;
struct LNode *next
}LNode,*LinkList;
//不带头结点的单链表
//初始化一个空的单链表
bool InitList(LinkList &L)
{
L=NULL; //空表,暂时还没有任何结点
return true;
}
void test()
{
LinkList L; //声明一个指向单链表的指针
InitList(L);//初始化一个空表
//后续代码······
}
//判断单链表是否为空
bool Empty(LinkList L)
{
return (L==NULL);
}
//带头结点的单链表
//初始化一个空的单链表
bool InitList(LinkList &L)
{
L=(LNode*)malloc(sizeof(LNode));//分配一个头结点
if(L==NULL)return false; //内存不足,分配失败
L->next=NULL; //头结点之后是空的
return true;
}
void test()
{
LinkList L; //声明一个指向单链表的指针
InitList(L);//初始化一个空表
//后续代码······
}
//判断单链表是否为空
bool Empty(LinkList L)
{
if(L->next==NULL)return true;
else return false;
}
//大部分时候使用有头结点的链表
//按位查找,返回第i个元素(带头结点)
LNode * GetElem(LinkList L,int i)
{
if(i<0)return NULL;
LNode *p; //指针p指向当前扫描到的结点
int j=0; //当前p指向的是第几个结点
p=L; //L指向头结点,头结点是第0个结点(不存数据)
while(p!=NULL&&j<i) //循环找到第i个结点
{
p=p->next;
j++;
}
return p;
}
//按值查找,找到数据域==e的结点
LNode * LocationElem(LinkList L,int e)
{
LNode *p=L->next;
//从第一个结点开始查找数据域为e的结点
while(p!=NULL&&p->data!=e)
p=p->next;
return p; //找到后返回该结点指针,否则返回NULL
}
//求表的长度
int Length(LinkList L)
{
int len=0;
LNode *p=L;
while(p->next!=NULL)
{
len++;
p=p->next;
}
return len;
}
//前插操作:在P结点之前插入元素e
bool InsertPriorNode(LNode *p,ElemType e)
{
if(p==NULL)return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s=NULL) return false; //内存分配失败
s->next=p->next;
p->next=s; //新结点连接在p之后
s->data=p->data; //s结点变成p结点
p->date=e; //p数据域覆盖为e,变成插入的结点
return true;
}
}