创建单链表
发布网友
发布时间:2022-05-26 17:27
我来回答
共1个回答
热心网友
时间:2023-10-06 13:54
额。。。。我的是c++的 你要不?
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
//---------------------------------------
typedef struct LNode{//定义结构体
int data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList & L,int n){
//创建一个n个元素的单链表
L=(LinkList) malloc(sizeof(LNode));
L->next=NULL;
LNode *q=L;
cout<<"输入数"<<endl;
for(int i=n; i>0; i--){
LNode* p=(LinkList)malloc(sizeof(LNode));
cin>>p->data;
q->next=p;
p->next=NULL;
q=p;
}
}
int ListDel(LinkList &L,int i,int &e){
//在带头节点的单链表L中,删除第i个元素,并由e返回其值
LNode *p=L;
int j=0;
while(p->next && j<i-1){
p=p->next;
++j;
}
if(!(p->next)||j>i-1) return -1;
LNode *q=p->next;
p->next=q->next;
e=q->data;
free(q);
return 0;
}
//----------------------
int GetElem(LinkList L,int i, int &e){
//L为带头节点的单恋表头指针
//当第i个元素存在时,其值赋给e并返回ok,否则返回error
LNode *p=L->next;
int j=1;
while(p && j<i){
p=p->next;++j;
}
if(!p || j>i) return -1;
e=p->data;
return 0;
}
//-------------------
int ListInsert(LinkList &L,int i, int e){
//在头节点的单链表L中的第i个元素之前插入元素e
LNode* p=L; int j=0;
while(p && j<i-1){p=p->next; ++j;}
if(!p || j>i-1) return -1;
LNode* s=(LinkList)malloc( sizeof(LNode));
s->data=e; s->next=p->next;
p->next=s;
return 0;
}
//-------------
void print(LinkList L)
{
cout<<"单链表的元素如下:"<<endl;
LNode* p=L;
p=p->next;
while(p->next!=NULL){
cout<<p->data<<" ";
p=p->next;
}
cout<<p->data<<endl;
}
int main(){
LinkList(L);
cout<<"请输入要创建的单链表的长度n"<<endl;
int n;
cin>>n;
CreateList(L,n);
print(L);
cout<<"请选择要进行的操作!i--插入;d--删除;s--查找"<<endl;
char x;
cin>>x;
switch(x){
case 'i':
int pos,e;
cout<<"请输入位置pos和要插入的数值e:"<<endl;
there:
cin>>pos>>e;
if(ListInsert(L,pos, e)!=0)
{cout<<"您的输入不正确!请重新输入!"<<endl;
goto there;
}
print(L);
break;
case 'd':
int posi;
here: cout<<"请输入要删除的位置"<<endl;
cin>>posi;
if(ListDel(L,posi,e)!=0)
{cout<<"您的输入不正确!请重新输入!"<<endl;
goto here;
}
cout<<"您要删除的位置上的元素是"<<e<<endl;
print(L);
break;
case 's':
int i;
cout<<"请输入要查找的位置"<<endl;
cin>>i;
int y;
y=GetElem(L,i, e);
if(y==-1)
cout<<"该位置上元素不存在!"<<endl;
else
cout<<"第"<<i<<"位置上的元素是"<<e<<endl;
break;
}
return 0;
}
自己对照一下吧,照抄对你一点好处没有,还是希望你自己能做一些东西。至少是看懂