#include<iostream>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int ElemType;
using namespace std;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode,*LinkList;
int InitList(LinkList &L)
{
L=new LNode;//或L=(LinkList)malloc(sizeod(LNode));
L->next=NULL;
return OK;
}
int DestroyList(LinkList &L)
{
LinkList p;
while(L)
{
p=L;
L=L->next;
delete p;//free(p);
}
return OK;
}
int ClearList(LinkList &L)
{
LinkList p,q;
p=L->next;
while(p)
{
q=p->next;
delete p;//free(p);
p=q;
}
L->next=NULL;
return OK;
}
int ListLength(LinkList L)
{
LinkList p;
int i=1;
p=L->next;
while(p){
p=p->next;
i++;
}
return i;
}
ElemType GetElem(LinkList L,int i)
{
int n;
LinkList p;
p=L->next;
for(n=1;n<i;n++)
{
p=p->next;
}
return p->data;
}
int LocateList(LinkList L,ElemType e)
{
LinkList p;
int i=1;
p=L->next;
while(p&&p->data!=e){
p=p->next;
i++;
}
if(p)return i;
else return 0;//没找到
}
int ListInsert(LinkList &L,int i,ElemType e)//在第i个结点前插入一个结点
{
int n;
LinkList p,s;
p=L->next;
for(n=1;n<i-1;n++)
{
p=p->next;
}
if(!p)return ERROR;//i大于表长
s=new LNode;s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
int DeleteList(LinkList &L,int i,ElemType &e)//删除第i个结点
{
int n;
LinkList p,q;
p=L->next;
for(n=1;n<i-1;n++)
{
p=p->next;
}
q=p->next;
if(!q)return ERROR;//i大于表长
e=q->data;
p->next=q->next;
delete q;
return OK;
}
/*int CreateList(LinkList &L,int n)//头插法
{
LinkList p;
for(i=1;i<=n;i++)
{
p=new LNode;
cin>>p->data;//scanf(&p->data);
p->next=L->next;
L->next=p;
}
}*/
int CreateList(LinkList &L,int n)//尾插法
{
int i;
LinkList p,r;
r=L;
for(i=1;i<=n;i++)
{
p=new LNode;
cin>>p->data;//scanf(&p->data);
p->next=NULL;
r->next=p;
r=p;
}
return OK;
}
void PrintList(LinkList L)
{
LinkList p;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
}
int main()
{
int n;
LinkList L;
InitList(L);
cout<<"该单链表有几个结点?"<<endl;
cin>>n;
cout<<"请依次输入结点数据:";
CreateList(L,n);
PrintList(L);
}
C++单链表基本操作初始化、创建、增、删、查等
于 2022-07-11 17:50:38 首次发布