单链表。
// 实验四单链表实现代码 //#include "stdafx.h" #include <stdlib.h> #include <stdio.h> typedef int DataType; typedef struct LNode { DataType data; /*存储结点值*/ LNode *next; /*链表下一结点的地址*/ }LNode,*LinkList; /*1.初始化链表函数,返回带头结点的单链表的头指针*/ struct LNode * InitList(){ struct LNode *pHead=(struct LNode *) malloc(sizeof(LNode));//为链表的头指针分配内存空间 if(pHead!=NULL) pHead->next=NULL; return pHead; } /*在带头结点的单链表中,查找第i(1≤i≤n)个结点,如果找到,则返回该结点的存储位置,否则返回NULL */ LNode *Locate(LNode *head,int i){ int k; LNode *p=head; for(k=0;k<i;k++){ if(p==NULL) return NULL; p=p->next; //移动指针 } return p; } //在第i个节点之前添加数据y,成功添加返回该节点的指针,否则返回空 struct LNode *InsertNode(struct LNode *head,int i,DataType y){ struct LNode *p=Locate(head,i-1);//先获取在第i个节点之前的指针 struct LNode *s; if(p!=NULL){ s=(LNode *) malloc(sizeof(LNode));//分配新节点的内存空间 if(s==NULL) return NULL; s->data=y; s->next=p->next; //添加数据 p->next=s; } return p; } //删除第i个节点的数据,成功删除返回1,否则返回-1 int DelNode(LNode *head,int i){ struct LNode *p=Locate(head,i); struct LNode *s=Locate(head,i-1); s->next=p->next; //添加代码 if(p->next!=NULL) return 1; else return -1; } //在第i个节点之后添加数据y,成功添加返回该节点的指针,否则返回空 struct LNode *InsertNodeAfter(struct LNode *head,int i,DataType y){ struct LNode *p=Locate(head,i); struct LNode *s; if(p!=NULL){ s=(LNode *) malloc(sizeof(LNode));//分配新节点的内存空间 if(s==NULL) return NULL; s->data=y; s->next=p->next; p->next=s; } return p; //添加代码 } /*在带头结点的单链表中,查找按指定值等于key的结点,如果找到返回该值顺序位置,否则返回-1 缺陷 ,修改*/ int LocateKey(LNode *pHead, DataType key){ int n=0; LNode *p=pHead; while(p!=NULL){ p=p->next; if(p->data==key) return n+1; n++; } return -1; } /*在带头结点的单链表中,获取第i个节点的数据保存到y中,如果成功获取返回1,否则返回0*/ int GetData(LNode *head, int i,DataType &y){ struct LNode *p=Locate(head,i); y=p->data; //添加代码 if(y!=NULL) return 1; else return 0; } //打印输出链表的每一个节点的数据值 void PrintList(LNode *pHead) { int n=0; if(pHead==NULL) return; LNode *p=pHead->next; while(p!=NULL){ printf("%d ",p->data); n++; p=p->next; } printf(" length=%d\n",n); } int main(int argc, char* argv[]) { //验证 LNode *head=InitList(); //获取带头结点的单链表的头指针 InsertNode(head,1,99); InsertNode(head,1,90); InsertNode(head,2,990); // DataType y; PrintList(head); int nn= LocateKey(head,99); DelNode(head,2); PrintList(head); return 0; }