链表的实现
1.声明如下
#include "stdio.h" #include "stdlib.h" typedef int DataType; struct Node;//单链表结点类型 typedef struct Node * PNode;//结点指针类型 //单链表结点结构 struct Node { DataType info; PNode link; }; typedef struct Node * LinkList;
2.
//创建一个空链表 LinkList createNullLinkList() { LinkList list=(LinkList)malloc(sizeof(struct Node)); if (list!=NULL) { list->link=NULL; } else { printf("Out of space! \n"); } return list; }
3.
//判断单链表是否为空 int isNullLinkList(LinkList list) { return (list->link==NULL); }
4.
//在单链表中谋求某元素的存储位置,找第一个值为X的结点 PNode locateLink(LinkList list,DataType x) { PNode p; if(list==NULL) { return NULL; } p=list->link; while (p!=NULL&&p->info!=x) { p=p->link; } return p; }
5.
//单链表的插入,在list带头结点的单链表中,p所指结点后面插入元素 int insertPostLink(LinkList list,PNode p,DataType x) { PNode q=(PNode)malloc(sizeof(struct Node)); if(q==NULL) { printf("out of space! \n"); return 0; } else { q->info=x; q->link=p->link; p->link=q; return 1; } }
6.
//在单链表的最后一个元素插入结点 int insertNodePostLastNode(LinkList list,DataType x) { PNode q=(PNode)malloc(sizeof(struct Node)); while (list->link!=NULL) { list=list->link; } q->info=x; list->link=q; return 1; }
7.
//在单链表中求p所指结点的前区结点 PNode locatePreLink(LinkList list,PNode p) { PNode p1; if (list==NULL) { return NULL; } p1=list; while (p1!=NULL&&p1->link!=p) { p1=p1->link; } return p1; }
8.
//单链表的删除 int deleteVLink(LinkList list,DataType x) { PNode p,q; p=list; if(p==NULL) { return 0; } while (p->link!=NULL&&p->link->info!=x) { p=p->link; } if(p->link==NULL) { printf("Not Exist! \n"); return 0; } else { q=p->link; p->link=q->link; free(q); return 1; } }
9.测试
int main() { PNode p; PNode q; int i; LinkList list; list=createNullLinkList(); i=insertPostLink(list,list,32); insertPostLink(list,list,42); i=insertNodePostLastNode(list,33); q=locateLink(list,42); i=q->info; printf("%d",i); }
浙公网安备 33010602011771号