// DataStructTest.cpp : Defines the entry point for the console application.
//
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
typedef struct node * pointer;
struct node
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int data;
pointer next;
};
typedef pointer lklist;
lklist head=NULL; //表头
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
//初始化链表
lklist initiate_lklist()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
lklist t=(lklist)malloc(sizeof(node));
t->next=NULL;
return t;
}
//求表长
int length_lklist(lklist head)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int i=0;
lklist p=head;
while(p->next!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
i++;
p=p->next;
}
return i;
}
//按序号查找
pointer find_lklist(lklist head,int index)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
lklist p=head;
int j=0;
while(p->next!=NULL && j<index)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
j++;
p=p->next;
}
if (j==index)
return p;
else
return NULL;
}
//定位
int locate_lklist(lklist head,int value)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
int index=0;
lklist p=head;
while(p->next!=NULL && value!=p->data)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
p=p->next;
index++;
}
if (p!=NULL && p->data==value)
return index;
else
return NULL;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
//删除
void delete_lklist(lklist head,int index, char * error)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
lklist p=NULL;
lklist pNext=NULL;
p=find_lklist(head,index-1); //找到前驱
if (p!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
pNext=p->next->next;
free(p->next);
p->next=pNext;
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
error="不存在此结点";
}
}
//新增
void insert_lklist(lklist head,int value,int index,char * error)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
lklist p=NULL;
lklist pNext=NULL;
lklist pNew=NULL;
p=find_lklist(head,index-1);
if (p!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
pNext=p->next;
pNew=(lklist)malloc(sizeof(node));
p->next=pNew;
pNew->next=pNext;
pNew->data=value;
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
error="不存在此结点";
}
}
//显示
void display(lklist head)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
lklist p=head;
int i=0;
p=p->next; //指向第一个结点
while(p!=NULL)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
i++;
cout<<"第"<<i<<"个元素的值为:"<<p->data<<endl;
p=p->next;
}
}
int main(int argc, char* argv[])
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
char * error=NULL;
head=initiate_lklist();
pointer p=NULL;
int i=0;
//新增
cout<<"新增4个结点"<<endl;
insert_lklist(head,1,1,error);
insert_lklist(head,2,2,error);
insert_lklist(head,3,3,error);
insert_lklist(head,4,4,error);
display(head);
//表长
i=length_lklist(head);
cout<<"表长为:"<<i<<endl;
//按序号查找
p=find_lklist(head,2);
cout<<"第二个元素的值为:"<<p->data<<endl;
//定位
cout<<"定位测试值为3的元素在链表中的位置为:"<<locate_lklist(head,3)<<endl;
//删除
cout<<"删除第3个元素:"<<endl;
delete_lklist(head,3,error);
display(head);
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。