未完待续…
#include <iostream>
#include <malloc.h>
#define MaxSize 50
using namespace std;
typedef int ElemType;//声明一个整型变量
//定义一个结构体为后面定义单链表所用
typedef struct LNode{
ElemType data;//存放数据元素值
struct LNode *next;
}LinkNode;
//void CreateListF(LinkNode *&L,ElemType a[],int n){
// LinkNode *s;
// L=(LinkNode *)malloc(sizeof(LinkNode));//创建头结点并把其后继指针域置为空
// L->next=NULL;
// for(int i=0;i<n;i++){
// s=(LinkNode *)malloc(sizeof(LinkNode));
// s->data=a[i];
// s->next=L->next;//开始时,L->next=NULL,那么s->next也==NULL
// L->next=s;
// }
//}
//创建一个单链表 并且 初始化它
void CreateListR(LinkNode *&L,ElemType a[],int n){
LinkNode *s,*r;
L=(LinkNode *)malloc(sizeof(LinkNode));
r=L;
for(int i=0;i<n;i++){
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}
//
void Display(LinkNode *&L){
LinkNode *p=L->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//初始化一个空的链表
void InitList(LinkNode *&L){
L=(LinkNode *)malloc(sizeof(LinkNode));
L->next=NULL;
}
//销毁线性表
void DestroyList(LinkNode *&L){
LinkNode *pre=L,*p=L->next;
while(p!=NULL){
free(pre);
pre=p;
p=p->next;
}
free(pre);
}
bool ListEmpty(LinkNode *&L){
return(L->next!=NULL);
}
//测量长度
int ListLength(LinkNode *&L){
int n=0;
LinkNode *p=L;
while(p->next!=NULL){
n++;
p=p->next;
}
return n;
}
//bool GetElem(LinkNode *&L,int i,ElemType &e){
// int j=0;
// LinkNode *p=L;
// if(i<0) return false;
// while(j<i&&p!=NULL){
// j++;
// p=p->next;
// }
// if(p==NULL)
// return false;
// else
// {
// e=p->data;
// return true;
// }
//}
//返回e
int LocateElem(LinkNode *&L,ElemType e){
int i=1;
LinkNode *p=L;
while(p->data!=e&&p->next!=NULL){
p=p->next;
i++;
}
if(p=NULL)
return(0);
else
return(i-1);
}
//在第i个位置上插入元素e
bool ListInsert(LinkNode *&L,int i,ElemType e){
int m=1;
LinkNode *p=L,*s;//插入的值必须用指针保存 ,毕竟用了结构体
if(p==NULL) return false;
while(m<i){
p=p->next;
m++;
}
if(p==NULL) return false;
else{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
}
int main(){
ElemType a[5]={1,4,8,3,5},e;//x为要查找的值
LinkNode *L1;
int judge;//用来判断线性表是否为空的依据
// CreateListF(L1,a,5);//头插法
InitList(L1);//初始化单链表表 ,必须在创建线性表之前,不然会重置线性表
CreateListR(L1,a,5);//尾插法
judge=ListEmpty(L1);//判断线性表是否为空
cout<<"是否为空链表:"<<judge<<endl;
Display(L1);//输出单链表
int length=ListLength(L1);//求单链表的长度
cout<<"单链表长度为:"<<length<<endl;
// DestroyList(L1); //销毁单链表
// cout<<"请输入你要查找哪个位置的值:";
// cin>>i;
// GetElem(L1,i,e);//查找某个位置数据元素值
// cout<<"第"<<i<<"个结点的值为"<<e<<endl;
// cout<<"输入你想查找的元素值:";
// cin>>e;
// int i=LocateElem(L1,e);//查询想要查找的元素值在链表中的位置
// cout<<"在第"<<i<<"个位置上";
int i;
cout<<"输入你想要插入的地方";
cin>>i;
cout<<endl;
cout<<"输入你想要插入的值:";
cin>>e;
ListInsert(L1,i,e);
cout<<"插入之后的链表是:";
Display(L1);
return 0;
}