#include <iostream>
#include <stdio.h>
#include <string.h>
#include <malloc.h>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
int GetElem_L(LinkList L,int i,ElemType &e)
//L 为带头节点的单链表的头指针 当低i个元素存在时赋值给e 否则输出-1
{
LinkList p=L->next;
int j=0;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
{
cout<<"第i个元素不存在"<<endl;
return -1;
}
return 1;
}
int ListInsert_L(LinkList &L,int i,ElemType e)
{
LinkList p=L;
int j=0;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
cout<<"出入位置错误"<<endl;
return -1;
}
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
int ListDlete_L(LinkList &L,int i,ElemType &e)
{
LinkList p=L;
int j=0;
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!(p->next)&&j>i-1)
{
cout<<"要删除的位置不合法"<<endl;
return -1;
}
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return 1;
}
void CreateList_L(LinkList &L,int n)//注意这样产生的单链表与输入的顺序是相反的
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
cout<<"请依次输入初始化序列元素:"<<endl;
for(int i=0;i<n;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
void PaintList_L(LinkList L)
{
cout<<"此时的序列为:\n";
L=L->next;
while(L!=NULL)
{
cout<<L->data<<" ";
L=L->next;
}
cout<<endl;
}
int main()
{
cout << "初始化链表个数:" << endl;
int n;
LinkList L;
cin>>n;
CreateList_L(L,n);
PaintList_L(L);
ElemType e;
int locate;
cout<<"依次输入要插入的位置和值:"<<endl;
cin>>locate>>e;
ListInsert_L(L,locate,e);
PaintList_L(L);
cout<<"依次输入要删除的位置:"<<endl;
cin>>locate;
ListDlete_L(L,locate,e);
PaintList_L(L);
return 0;
}
数据结构_单链表
最新推荐文章于 2024-09-04 20:32:35 发布