数据结构 用链表实现学生信息管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;