单链表的基本操作:
#include<stdio.h>
#include<stdlib.h>
typedef struct Lnode{
int data;
struct Lnode *next;//结构体的指针
}*LinkList;
LinkList InitList(LinkList &L);
bool ScanfData(LinkList &L,int data);
bool DeletData(LinkList &L);
int LengthS(LinkList &L);
LinkList LookSLoc(LinkList &L,int i);
bool LinkInsert(LinkList &L,int i,int e);
bool DeleyData(LinkList &L,int i,int e);
LinkList first;
int main(){
first=InitList(first);
LinkList TempP;
TempP=first;
ScanfData(first,12);
ScanfData(first,13);
ScanfData(first,31232);
ScanfData(first,1);
ScanfData(first,232);
ScanfData(first,56);
while(TempP->next!=NULL){
TempP=TempP->next;
printf("%d\n",TempP->data);
}
DeletData(first);
TempP=first;
while(TempP->next!=NULL){
TempP=TempP->next;
printf("%d\n",TempP->data);
}
printf("链表的长度为:%d\n",LengthS(first));
LinkList LookFinData;
LookFinData=LookSLoc(first,3);
printf("寻找到的节点的数值为:%d\n",LookFinData->data);
LinkInsert(first,3,245);
LinkInsert(first,3,245);
LinkInsert(first,3,245);
LinkList TempA;
TempA=first;
while(TempA->next!=NULL){
TempA=TempA->next;
printf("插入数据之后为:%d\n",TempA->data);
}
DeleyData(first,3,245);
TempA=first;
while(TempA->next!=NULL){
TempA=TempA->next;
printf("删除数据之后为:%d\n",TempA->data);
}
return 0;
}
//fun:创建头结点
//brief:@头结点的地址
//return:头结点
LinkList InitList(LinkList &L){
L = (LinkList)malloc(sizeof(Lnode));
L->data=0;
L->next=NULL;
return L;
}
//fun:在链表的末端添加一个元素
//brief:@ 头结点@插入的数值
//return: ture
bool ScanfData(LinkList &L,int data){
LinkList TempP,TempPInc;
TempP=L;//头结点不变
//将临时指针的变量移到最后一个节点的位置
while(TempP->next!=NULL){
TempP=TempP->next;
}
//新的节点
TempPInc=(LinkList)malloc(sizeof(Lnode));//申请大的空间节点
TempPInc->data=data;
TempPInc->next=NULL;
//将新申请的节点接入
TempP->next=TempPInc;
L->data++;
return true;
}
//fun:在链表的末端删除一个节点
//brief:@链表
//return:true
bool DeletData(LinkList &L){
LinkList TempP=L;
LinkList TempM;
while(TempP->next!=NULL){
TempM=TempP;
TempP=TempP->next;
}
free(TempP);
TempM->next=NULL;
return true;
}
//fun:求链表的长度
//brief:@链表
//return:长度
int LengthS(LinkList &L){
int len=0;
LinkList TempP=L;
while(TempP->next!=NULL){
len++;
TempP=TempP->next;
}
return len;
}
//fun:按照序号找一个节点
//brief:@链表@序号
//return:找到的这个节点
LinkList LookSLoc(LinkList &L,int i){
LinkList TempP=L;
int j=0;
while((TempP->next!=NULL)&&(j<i)){
j++;
TempP=TempP->next;
}
return TempP;
}
//在链表中间插入一个
//brief:@链表@插入的位置@插入的值
//return:true
bool LinkInsert(LinkList &L,int i,int e){
LinkList TempS;
TempS=L;
LinkList TempM;
for(int j=0;j<i;j++){
TempS=TempS->next;
printf("fasd");
}
if(TempS==NULL){
return false;
}
TempM=(LinkList)malloc(sizeof(Lnode));
TempM->data=e;
TempM->next=TempS->next;
TempS->next=TempM;
L->data++;
return true;
}
//fun:删除节点的操作
//brief:@链表@删除的位置@删除的值
//return:true
bool DeleyData(LinkList &L,int i,int e){
LinkList TempP,TempM;
TempP=L;
for(int j=0;(j<i-1)&&(TempP!=NULL);j++){
TempP=TempP->next;
}
if((TempP==NULL)||(TempP->next==NULL)){//链表中没有元素
return false;
}
TempP->next=TempP->next->next;
free(TempP);
L->data--;
return true;
}
//头插发插入数值
//brief@链表@数值
//return:链表
LinkList HeadInsert(LinkList &L,int e){
LinkList TempP,TempM;
TempP=L;
TempM=(LinkList)malloc(sizeof(Lnode));
printf("读入要插入的数值:%d\n");
TempM->data=e;
if(TempP->next==NULL){
TempM->next=NULL;
}
else{
TempM->next=TempP->next;
TempP->next=TempM;
}
}