// 实验四单链表实现代码
//#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;
}