题目一 链表基本操作
一、数据结构与核心算法的设计描述
1、单链表的最大长度 #define MAXSIZE 100 2、单链表的结点类型定义
/* 定义elemtype为int类型 */ typedef int elemtype; /* 单链表的结点类型 */ typedef struct STD {
elemtype elem; STD *next;
}list, * linklist; 3、初始化单链表
/* 函数功能:对链表进行初始化 。参数:链表(linklist L)。
成功初始化返回1,否则返回0 */ int init(linklist &L) {
L=(linklist)malloc(sizeof(list));//头结点申请内存。 if(!L) //判断有无申请到空间。
return 0; //没有申请到内存,参数失败返回0 L->next=NULL;
L->elem=0; //单链表中有多少元素 return 1; //成功参数返回1 }
4、清空单链表
/* 函数功能:把链表清空 。参数:链表(linklist L)。成功清空链表返回1*/ int makeempty(linklist &L) {
linklist p,q; p=L->next;
while(p) //当p非空时,删除p {
q=p;
p=p->next; free(q); }
L->next=NULL; //只剩头指针,所以L->next=NULL L->elem=0; //清空后链表中元素为0 return 1; //清空后返回1 }
5、求链表长度
/*函数功能:返回链表的长度。 参数;链表(linklist L)。 函数返回链表的长度 */ int getlength(linklist L) {
linklist p;
p=L->next; int j=0; while(p) {
j++; //统计链表中元素 p=p->next; }
return j; //最后返回链表长度.
}
6、判断链表是否为空
/*函数功能:判断链表是否为空。参数;链表(linklist L)。链表为空时返回0,不为空返回1*/ int isempty(linklist L) {
if(L->next) //头结点后有元素表示链表不空则返回1 return 1; else
return 0; //头结点后没有元素表示链表不空则返回0 }
7、检查链表是否为满
/*函数功能:判断链表是否为满。参数;链表(linklist L)。链表为满时返回0,不为满返回1*/ int isfull(linklist L) {
if(L->elem <= MAXSIZE) //头结点的elem储存的为链表的长度。 return 1; //其小于MAXSIZE表示链表不满 else
return 0; //否则返回0 }
8、遍历链表
/*函数功能:遍历链表,输出每个节点的elem值。参数;链表(linklist L) 通过循环逐个输出节点的elem值*/ void show(linklist L) {
linklist p; p=L->next;
if(isempty(L)==0) //当链表为空时则输出链表为空 {
cout<<\链表为空!\ }
while(p) //当链表为不空时则输出链表每个节点的elem值 {
cout<
cout< 9、从链表中查找元素 /*函数功能: 从链表中查找有无给定元素。参数;链表(linklist L),给定元素(int i) 如果链表中有给定元素(i)则返回1,否则返回0*/ int find(linklist L, int i) { linklist p; p=L->next; while(p) { if(p->elem==i) //判断有无元素I,有返回1 return 1; p=p->next; } return 0; //没有找到返回0 } 10、从链表中查找与给定元素值相同的元素在表中的位置 /*函数功能: 从链表中查找给定元素的位置。参数;链表(linklist L),给定元素(int i) 如果链表中有给定元素i则返回元素的位置, 没有则返回0*/ int location(linklist L,int i) { linklist p; int j=0; p=L->next; while(p) { j++; if(p->elem==i) //判断有无元素i,有返回其的位置j return j; p=p->next; } return 0; //没有则返回0 } 11、向链表中插入元素 /*函数功能:向链表中的某个位置插入元素。参数;链表(linklist L),位置(int i),元素(elemtype e)。成功插入返回1,否则返回0 */ int insert(linklist &L, int i, elemtype e) { linklist p, s; int j = 0; p = L; while (p&&j p = p->next; j ++; } if(j>i-1||!p) //不符合条件返回0 return 0; s = (linklist)malloc(sizeof(list)); //给节点s分配内存 s->elem = e; s->next = p->next; //插入操作 p->next = s; L->elem++; //插入完成后头结点的elem加1 return 1; //成功插入返回1 } 12、从链表中删除元素 /*函数功能:在链表中的某个位置删除元素。参数;链表(linklist L),位置(int i),元素(elemtype e)。成功删除返回1,否则返回0 */ int deleteelem(linklist &L,int i) { linklist p,q; int j=0; p=L; while (p->next&&j p=p->next; j++; } if(j>i-1||!(p->next)) //不符合条件返回0 return 0; q=p->next; p->next=q->next; //删除操作 free(q); L->elem--; ////插入完成后头结点的elem减1 return 1; //成功删除返回1 } 13、主界面函数 /* 函数功能:显示所有操作功能。参数;无*/ void zhujiemian() { cout< cout<<\数据结构实验一\ cout<<\ cout<<\链表初始化\ cout<<\清空链表\ cout<<\求链表长度\ cout<<\链表是否为空\ cout<<\检查链表是否为满\ cout<<\遍历链表\ cout<<\从链表中查找元素\ cout<<\从链表中查找与给定元素值相同的元素在表中的位置\ cout<<\向链表中插入元素\ cout<<\从链表中删除元素\ cout<<\其他键退出\ cout<<\ cout<<\请选择要进行操作的序号(1--10):\}
相关推荐: