数据结构链表c++实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实现了一些单链表操作以及几个算法,都已注明编译环境:VC6.0

#ifndef COMMON //头文件common.h中的内容

#define COMMON

#include

#include

#include

#include

#include

#define OVERFLOW 0

#define ERROR 0

#define OK 1

#define FALSE 0

#define TRUE 0

#define INFEASIBLE 0

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

typedef int Status;

typedef int ElemType;

/**链表存储结构**/

typedef struct LNode

{

ElemType data;

struct LNode *next;

}LNode,*LinkList; //线性链表类型

/******链表相关函数******/

Status ListInit(LinkList &A)

{

//初始化链表,分配头结点

A=(LinkList)malloc(sizeof(LNode));

A->next=NULL;

A->data=0;

return OK;

}

int ListLocate(LinkList A,ElemType x)

{

//确定元素x在链表A中的位置,并返回所在结点位置LNode * p=A->next;

int location=1;

while(p!=NULL && p->data!=x)

{

location++;

p=p->next;

}

if(NULL==p)

return ERROR;

else

return location;

}

Status ListInsert(LinkList &A,ElemType x,int i)

{

//向带头结点链表A中的i(从1开始)位置插入元素x if(i<=0)

return INFEASIBLE;

int k=1;

LNode *p,*q=NULL;

p = A;

while(knext!=NULL)

{

p = p->next;

k++;

}

q = (LNode*)malloc(sizeof(LNode));

q->data = x;

q->next = p->next;

p->next = q;

return OK;

}

Status ListDelete(LinkList &A, int i)

{

//删除带头结点的链表A的位置i(从1开始)处的结点if(i<=0)

return INFEASIBLE;

int k=1;

LNode *p = A,*q = A->next;

while(q!=NULL&&k

{

p=p->next;

q=q->next;

k++;

}

if(q==NULL)

{

printf("位置%d处无结点,无法删除\n",i);

return ERROR;

}

else

{

p->next=q->next;

free(q);

printf("删除成功\n");

return OK;

}

}

int ListLength(LinkList A)

{

//求得带头结点单链表的长度

LNode *p;

int count=0;

p=A->next;

while(p!=NULL)

{

p=p->next;

count++;

}

return count;

}

void ListPrint(LinkList A)

{

//打印链表所有节点

LNode *p;

p = A->next;

while(p!=NULL)

{

printf("%d\n",p->data);

p = p->next;

}

}

int ListCompare(LNode *p,LNode *q)

{

//用于比较两个结点数据域大小的函数if(p->data>q->data)

return 0;

else

return 1;

}

Status ListSort(LinkList &A)

{

//带头结点的单链表排序算法

//利用一个简单的冒泡排序来实现

LNode *q = A;

LNode *max,*prior,*p,*k;

while(q->next!=NULL)

{

max=q->next;

prior=max;

k=max;

p=max->next;

while(p!=NULL)

{

if(ListCompare(max,p))

{

max=p;

prior=k;

}

k=p;

p=p->next;

}

if(max==q->next)

{

q=q->next;

continue;

}

else

相关文档
最新文档