没写主函数,需要的小伙伴,直接拿去用。
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
//求表长的长度
int Length(LinkList L)
{
int len=0;
LNode *p=L;
while(p!= NULL)
{
p = p->next;
len++;
}
return len;
}
//按位查找
LNode* GetElem(LinkList L,int i)
{
if(i<0)
return NULL;
LNode* p=L;
int j=0;
while(p != NULL && j<i)
{
p=p->next;
j++;
}
return p;
}
//初始化一个单链表(带头结点)
bool InitList(LinkList &L)
{
L=(LNode*)malloc(sizeof(LNode));
if(L == NULL)
return false;
L->next=NULL;
return true;
}
//头插法建立单链表
LinkList List_HeadInsert(LinkList &L)
{
LNode *s;
int x;
L=(LNode*)malloc(sizeof(LNode*));
L->next=NULL;
cin>>x;
while(x!=9999) //输入999结束
{
s=(LNode*)malloc(sizeof(LNode*));
s->data=x;
s->next=L->next;
L->next=s;
cin>>x;
}
return L;
}
//后插操作:在p结点之后插入元素e
bool InsertNextNode(LNode *p,int e)
{
if(p == NULL)
return false;
LNode *s=(LNode*)malloc(sizeof(LNode));
if(s == NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//在第i个位置插入元素e
bool ListInsert(LinkList &L,int i,int e)
{
/*if(i<0)
return false;
LNode *p;
p=L;
int j=0;
while(p != NULL && j<i-1)
{
p=p->next;
j++;
}*/
LNode* p=GetElem(L,i-1);
/*if(p == NULL)
return false;
LNode *s = (LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;*/
return InsertNextNode(p,e);
}
//前插操作:在p结点之前插入元素e
bool InsertPriorNode(LNode *p,int e)
{
if(p == NULL)
return false;
LNode *s=(LNode*)malloc(sizeof(LNode));
if(s == NULL)
return false;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
//按照位序删除
bool ListDelete(LinkList &L,int i,int e)
{
/*if(i<1)
return false;
int j=0;
LNode* p=L;
while(p != NULL && j<i-1)
{
p->next;
j++;
}*/
LNode* p=GetElem(L,i-1);
if(p == NULL)
return false;
if(p->next == NULL)
return false;
LNode* s;
s=p->next;
p->next=s->next;
e=s->data;
free(s);
return true;
}
//指定结点的删除
bool DeleteNode(LinkList &s,LNode *p)
{
if(p == NULL)
return false;
LNode* q;
q=p->next;
p->data=q->data;
p->next=q->next;
free(q);
return true;
}
int main()
{
return 0;
}