#define TRUE 1
#define ERROR 0
#define MAX_SIZE 100
#define OK 1
/**链式存储
* 1、节点:数据域,指针域组成一个节点
* 2、链表:n个节点由指针链组成一个链表
* 3、单链表、双链表、循环链表
*
* 4、不带头结点
* 5、带头结点
* 6、顺序存取
* */
class LianList{
typedef struct{
char num[8];
char name[8];
int score;
} ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
} LNode,*LinkList;
/**带头结点的单链表
* 初始化
*/
int InitList_L(LinkList &L){
L=new LNode;//或 L=(LinkList) malloc(sizeof(LNode));
L->next=NULL;
return OK;
}
/**判断链表是否为空
* 为空返回1
* 否则返回0
* */
int ListEmpty(LinkList L){
if (L->next)
return 0;
else
return 1;
}
/**单链表的销毁
* 从头指针开始依次释放所有节点
* */
int DestroyList_L(LinkList &L){
LinkList p;
while (L!=NULL){
p=L;
L=L->next;
delete p;// free(p);
}
return OK;
}
/**清空单链表
* 从首元节点开始依次释放所有节点
* */
int ClearList_L(LinkList &L){
LNode *p;
while (L->next!=NULL) {
p = L->next;
L->next = p->next;
delete p; //free(p);
}
return OK;
}
/**单链表L的表长
* */
int LengthList_L(LinkList L,int &i){
i=0;
LNode *p;
p=L->next;
while (p){
i++;
p=p->next;
}
return OK;
}
/**取单链表的第i个元素值
* */
int GetILNode(LinkList L,int i,ElemType &e){
LNode *p;
if (i<1)return ERROR;
p=L->next;i--;
while (p!=NULL&&i-->0){
p=p->next;
}
if (i==0&&p!=NULL){
e=p->data;
return OK;
} else{
return ERROR;
}
}
/**取单链表的第i个元素值
* */
int GetILNode2(LinkList L,int i,ElemType &e){
LNode *p=L->next;
int j=1;
while (p&&j++<i){
p=p->next;
}
if (!p||i!=j) return ERROR;
e=p->data;
return OK;
}
/**按值查找
* 1.所在位置(物理地址)
* 1.所在顺序
* */
LNode *LocateElem_L(LinkList &L,ElemType e){
LNode *p;
p=L->next;
while (p&&p->data.name!=e.name){
p=p->next;
}
return p;
}
/**按值查找
* 1.所在位置(物理地址)
* 1.所在顺序
* */
int LocateElem1_L(LinkList &L,ElemType e){
LNode *p;
p=L->next;
int i=1;
while (p&&p->data.name!=e.name){
p=p->next;
i++;
}
if (p) return i;
return 0;
}
/**插入操作
* */
int InsertList_L(LinkList &L,int i,ElemType e){
LNode *p=L;
int j=0;
while (p&&j<i-1){ //找到第i-1 个元素
p=p->next;
j++;
}
if (!p||i<1)return ERROR;
LNode *s = new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
/**删除操作
* */
int DeleteList_L(LinkList &L,int i,LNode *&e){
int j=0;
LNode *p=L;
while (p->next&&j<i-1){ //找到第i-1个节点p
p=p->next;
}
if (!p->next||i<1) return ERROR;
e=p->next;
p->next=e->next;
return OK;
}
/**建立-头插法 * */
int CreateList_H(LinkList &L,int n){
L=new LNode ;
L->next=NULL;
for (int i = n; i >0 ; --i) {
LNode *p=new LNode ;
// cin>>p->data;
p->next=L->next;
L->next=p;
}
}
/**建立-尾插法
* */
int CreateList_E(LinkList &L,int n){
L=new LNode;
L->next=NULL;
LNode *r=L;
for (int i = n; i > 0; --i) {
LNode *p=new LNode;
// p->data=value
p->next=NULL;
r->next=p;
r=p;
}
}
};
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。