单链表

来源:互联网 发布:unity3d导入图片 编辑:程序博客网 时间:2024/06/04 01:27

头文件:

struct Node {ElemType data;struct Node *next;};typedef struct Node *LinkList;


1.c基本的操作

Status InitList (LinkList *list) {//返回一个空的线性表*list = (LinkList)malloc (sizeof(struct Node));if (!list) {exit(OVERFLOW);}(*list)->next = NULL;return OK;}Status DesroyList (LinkList *list) {//销毁线性表LinkList q;while (*list) {q = (*list)->next;free (*list);*list = q;}return OK;}Status ClearList (LinkList *list) {//将链表重置为空表LinkList p,q;p = (*list)->next;while (p) {q = p->next;free (p);q = p;}(*list)->next = NULL;    return OK;}Status ListEmpty (LinkList *list) {//判断链表是否为空if ((*list)->next == NULL) {return TRUE;}else {return FALSE;}}int ListLength (LinkList *list) {//返回的是链表的长度int count = 0;LinkList q = (*list)->next;while (q) {count++;q = q->next;}return count;}Status GetElem (LinkList *list,int i,ElemType *e) {//得到i位置上的元素int j = 1;LinkList q = (*list)->next;while (q!=NULL&&j <= i) {j++;q = q->next;}if (j > i) {*e = q->data;return OK;//存在}return ERROR;//不存在}int locateElem (LinkList *list,ElemType e,Status (*compare)(ElemType,ElemType)) {//找出相应的位置LinkList q = (*list)->next;int count = 0;while (q) {if (compare (q->data,e) == 0) {count++;break;}q = q->next;}return count;}Status PriorElem (LinkList *list,ElemType cur_e,ElemType *pre_e) {//cur_e的前一个位置,LinkList p = (*list)->next;LinkList q;if (p!=NULL) {//如果p为空的情况while (p->next!=NULL) {q = p->next;if (q->data == cur_e) {*pre_e = p->data;return OK;}p = q;}}return ERROR;}Status NextElem (LinkList *list,ElemType cur_e,ElemType *pre_e) {//返回的是cur_e的后一个位置LinkList p = (*list)->next;LinkList q;if (p!=NULL) {while (p->next!=NULL) {q = p->next;if (p->data == cur_e) {*pre_e = q->data;return OK;}p  = q;}}return ERROR;}Status ListInsert (LinkList *list,int i,ElemType e) {//插入的操作int j = 1;LinkList q,p;p = (*list);while (p!=NULL&&j < i) {p = p->next;j++;}if (j >= i) {q = (LinkList)malloc(sizeof (struct Node));if (q == NULL) {return ERROR;}else {q->data = e;q->next = p->next;p->next = q;}}return OK;}Status ListDelete (LinkList *list,int i,ElemType *e) {int j = 0;LinkList p = *list;while (p->next&&j < i - 1){p = p->next;j++;}if (!p->next || j > i - 1) {return ERROR;}else {LinkList q = p->next;p->next = q->next;*e = q->data;free (q);return OK;}}Status LinkTravrse (LinkList *list,void (*visit)(ElemType)) {LinkList p = (*list)->next;while (p!=NULL) {visit(p->data);p = p->next;}return OK;}


 

 

 

原创粉丝点击