#include <iostream>
#include<algorithm>
#include<stdio.h>
#include<malloc.h>
#include<stack>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
} LinkList;
void InitList(LinkList *&head)//初始化链表
{
head =(LinkList*)malloc(sizeof(LinkList));
head->next=NULL;
}
void CreateListA(LinkList *&head,int a[],int n)//尾插法
{
LinkList *r,*s;
r = head;
for(int i = 0;i<n;i++)
{
s = (LinkList*)malloc(sizeof(LinkList));
s->data= a[i];
r->next= s;
r = s;
}
r->next=NULL;
}
void CreateListB(LinkList *&head,int a[],int n)//头插法
{
LinkList *s;
s = head;
for(int i = 0;i<n;i++)
{
s= (LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
s->next = head->next;
head->next=s;
}
}
void DestroyList(LinkList *&head)
{
LinkList *pre = head,*p = head->next;
while(p!=NULL)
{
free(pre);
pre= p;
p = pre->next;
}
free(pre);
}
bool ListEmpty(LinkList *&head)
{
return (head->next==NULL);
}
int ListLength(LinkList *&head)//长度
{
LinkList *p;
p = head;
int num = 0;
while(p->next!=NULL)
{
num++;
p = p->next;
}
return num;
}
void DisplayList(LinkList *&head)//线性输出
{
LinkList *p = head->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
bool GetElem(LinkList *head,int i,int &e)//第I个元素输出
{
LinkList *p;
p = head;
for(int j = 0;j<i&&p!=NULL;j++)
{
p = p->next;
}
if(p==NULL)
return false;
else
{
e = p->data;
return true;
}
}
int LocateElem(LinkList *head,int e)//定位元素
{
LinkList *p = head->next;
int i;
for( i = 0; p!=NULL&&p->data!=e;i++)
{
p=p->next;
}
if(p==NULL)
return false;
else return i;
}
bool ListInsert(LinkList *head, int i,int e)//在第I个位置插入元素
{
LinkList *p=head;
LinkList *s;
for(int j = 0;j<i-1&&p!=NULL;j++)
{
p=p->next;
}
if(p==NULL)
return false;
else {
s= (LinkList*)malloc(sizeof(LinkList));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
}
bool ListDelete(LinkList *&head,int i,int &e)//删除第I个元素
{
LinkList *p = head,*q;
for(int j = 0; j<i-1&&p!=NULL;j++)
{
p=p->next;
}
if(p==NULL)
return false ;
else{
q= p->next;
if(q==NULL)
return false;
e =q->data;
p->next=q->next;
free(q);
return true;
}
}
int main()
{
LinkList *head;
InitList(*&head);
//cout<<ListEmpty(*&head)<<endl;
int n;
cout<<"请输入元素的个数n"<<endl;
cin>>n;
int m;
int a[100];
for(int i = 0;i<n;i++)
{
cin>>a[i];
}
CreateListA(*&head,a,n);
DisplayList(*&head);
cout<<"元素的个数为"<<ListLength(head)<<endl;
int e,z;
cout<<"请输入ze代表在z位置插入e"<<endl;
cin>>z>>e;
ListInsert(*&head,z,e);
DisplayList(*&head);
int qq;
cout<<"请输入qq,代表删除第几位置的元素"<<endl;
cin>>qq;
int zz;
ListDelete(*&head,qq,zz);
DisplayList(*&head);//输出测试
cout<<"删除的元素是"<<zz<<endl;
return 0;
}
#include<algorithm>
#include<stdio.h>
#include<malloc.h>
#include<stack>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
} LinkList;
void InitList(LinkList *&head)//初始化链表
{
head =(LinkList*)malloc(sizeof(LinkList));
head->next=NULL;
}
void CreateListA(LinkList *&head,int a[],int n)//尾插法
{
LinkList *r,*s;
r = head;
for(int i = 0;i<n;i++)
{
s = (LinkList*)malloc(sizeof(LinkList));
s->data= a[i];
r->next= s;
r = s;
}
r->next=NULL;
}
void CreateListB(LinkList *&head,int a[],int n)//头插法
{
LinkList *s;
s = head;
for(int i = 0;i<n;i++)
{
s= (LinkList*)malloc(sizeof(LinkList));
s->data=a[i];
s->next = head->next;
head->next=s;
}
}
void DestroyList(LinkList *&head)
{
LinkList *pre = head,*p = head->next;
while(p!=NULL)
{
free(pre);
pre= p;
p = pre->next;
}
free(pre);
}
bool ListEmpty(LinkList *&head)
{
return (head->next==NULL);
}
int ListLength(LinkList *&head)//长度
{
LinkList *p;
p = head;
int num = 0;
while(p->next!=NULL)
{
num++;
p = p->next;
}
return num;
}
void DisplayList(LinkList *&head)//线性输出
{
LinkList *p = head->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p = p->next;
}
cout<<endl;
}
bool GetElem(LinkList *head,int i,int &e)//第I个元素输出
{
LinkList *p;
p = head;
for(int j = 0;j<i&&p!=NULL;j++)
{
p = p->next;
}
if(p==NULL)
return false;
else
{
e = p->data;
return true;
}
}
int LocateElem(LinkList *head,int e)//定位元素
{
LinkList *p = head->next;
int i;
for( i = 0; p!=NULL&&p->data!=e;i++)
{
p=p->next;
}
if(p==NULL)
return false;
else return i;
}
bool ListInsert(LinkList *head, int i,int e)//在第I个位置插入元素
{
LinkList *p=head;
LinkList *s;
for(int j = 0;j<i-1&&p!=NULL;j++)
{
p=p->next;
}
if(p==NULL)
return false;
else {
s= (LinkList*)malloc(sizeof(LinkList));
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
}
bool ListDelete(LinkList *&head,int i,int &e)//删除第I个元素
{
LinkList *p = head,*q;
for(int j = 0; j<i-1&&p!=NULL;j++)
{
p=p->next;
}
if(p==NULL)
return false ;
else{
q= p->next;
if(q==NULL)
return false;
e =q->data;
p->next=q->next;
free(q);
return true;
}
}
int main()
{
LinkList *head;
InitList(*&head);
//cout<<ListEmpty(*&head)<<endl;
int n;
cout<<"请输入元素的个数n"<<endl;
cin>>n;
int m;
int a[100];
for(int i = 0;i<n;i++)
{
cin>>a[i];
}
CreateListA(*&head,a,n);
DisplayList(*&head);
cout<<"元素的个数为"<<ListLength(head)<<endl;
int e,z;
cout<<"请输入ze代表在z位置插入e"<<endl;
cin>>z>>e;
ListInsert(*&head,z,e);
DisplayList(*&head);
int qq;
cout<<"请输入qq,代表删除第几位置的元素"<<endl;
cin>>qq;
int zz;
ListDelete(*&head,qq,zz);
DisplayList(*&head);//输出测试
cout<<"删除的元素是"<<zz<<endl;
return 0;
}