数据结构 用链表实现学生信息管理系统

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

3、4、

7、

#include

using namespace std;

//实现线性表的链式存储结构的类型定义

typedef int Elemtype;

#define OK 1;

#define ERROR -1;

struct NODE //结点类型

{

Elemtype elem;

NODE *next;

};

struct LINK_LIST //链表类型

{

NODE *head;

};

//典型操作的算法实现

//初始化链表L

int InitList(LINK_LIST *L)

{

L->head = (NODE*)malloc(sizeof(NODE)); //为头结点分配存储单元if (L->head) {L->head->next=NULL; return OK;}

else return ERROR ;

}

//销毁链表L

void DestoryList(LINK_LIST *L)

{

NODE *p;

while (L->head) //依次删除链表中的所有结点

{

p=L->head; L->head=L->head->next;

free(p);

}

}

//清空链表L

void ClearList(LINK_LIST *L)

{

NODE *p;

while (L->head->next){ //p指向链表中头结点后面的第一个结点

p=L->head->next;

L->head->next=p->next; //删除p结点

free(p); //释放p结点占据的存储空间

}

}

//求链表L的长度

int ListLength(LINK_LIST L)

{

NODE *p;

int len;

len=0;

for(p=L.head;p->next!=NULL; p=p->next)

len++ ;

return(len);

}

// 判链表L空否。

int IsEmpty(LINK_LIST L)

{

if (L.head->next==NULL) return true;

else return false;

}

//()通过e返回链表L中第i个数据元素的内容

void GetElem(LINK_LIST *L,int i,Elemtype *e)

{

NODE *p;

int j;

if (i<1||i>ListLength(*L))

exit(-1); //检测i值的合理性

for (p=L->head,j=0; j!=i; p=p->next,j++);

p = L->head;

for (j=0; j

p=p->next;

*e=p->elem; //将第i个结点的内容赋给e指针所指向的存储单元中

}

//在链表L中检索值为e的数据元素

NODE *LocateELem(LINK_LIST L,Elemtype e)

{

NODE *p;

for (p=L.head->next;p&&p->elem!=e;p=p->next); //寻找满足条件的结点return(p);

}

//返回链表L中结点e的直接前驱结点

NODE *PriorElem(LINK_LIST L,NODE* e)

{

NODE *p;

if (L.head->next==e) return NULL; //检测第一个结点

for (p=L.head;p->next&&p->next!=e;p=p->next);

if (p->next==e) return p;

else return NULL;

}

//返回链表L中结点e的直接后继结点

NODE *NextElem(LINK_LIST L,NODE* e)

{

NODE *p;

for(p=L.head->next;p&&p!=e;p=p->next);

if (p) p=p->next;

return p;

}

//在链表L中第i个数据元素之前插入数据元素e

int ListInsert(LINK_LIST *L,int i,Elemtype e)

{

NODE *p,*s;

if (i<1||i>ListLength(*L)+1) return ERROR;

p=L->head;

for (int j=0; j

p=p->next;

s=(NODE*)malloc(sizeof(NODE));

if (s==NULL) return ERROR;

s->elem=e;

s->next=p->next; p->next=s; //将s结点插入

return OK;

}

//将链表L中第i个数据元素删除,并将其内容保存在e中。int ListDelete(LINK_LIST *L,int i,Elemtype *e)

{

NODE *p, *s;

if (i<1||i>ListLength(*L)) return ERROR; //检查i值的合理性p=L->head;

for(int j=0;j

p=p->next;

相关文档
最新文档