顺序表:链表实现
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;//linklist
typedef struct DNode
{
ElemType data;
struct DNode *prior,*next;
}DNode,*DLinkList;//double linklist
#define MaxSize 100
typedef struct{
ElemType data;
int next;
}SLinkList[MaxSize];//static linklist
LinkList ListInsert_head(LinkList &L); //1
LinkList ListInsert_tail(LinkList &L); //2
LNode *GetElem(LinkList L,int i); //3
LNode *LocateElem(LinkList L,ElemType x); //4
int GetLength(LinkList L); //5
bool Insert_head(LinkList &L,ElemType x,int i);//6
//bool Insert_tail_1(LinkList &L,ElemType x,int i); ru 6,GetElem(L,i)
bool Insert_tail_2(LinkList &L,ElemType x,int i);//7 swap like insert_head
bool del_LinkList(LinkList &L,int i,LNode &x);
bool DLinkList_create(DLinkList &L);
bool DLinkList_insert(DLinkList &L,int i,ElemType x);
bool DLinkList_delete(DLinkList &L,int i,ElemType &x);
DNode *DGetElem(DLinkList L,int i);
bool DLinkList_delete(DLinkList &L,int i,ElemType &x){
DNode *p,*q;
if ((p=DGetElem(L,i-1))==NULL)
{
return false;
}
q=p->next;
p->next=q->next;
q->next->prior=q;
free(q);
return true;
}
bool DLinkList_insert(DLinkList &L,int i,ElemType x){
DNode *s,*p;
p=(DNode *)malloc(sizeof(DNode));
p->data=x;
if ((s=DGetElem(L,i-1))==NULL)
{
return false;
}
p->prior=s;
p->next=s->next;
s->next->prior=p;
s->next=p;
return true;
}
DNode *DGetElem(DLinkList L,int i){
if (i==0)
{
return L;
}
if (i<1)
{
return NULL;
}
int k=1;
DNode *p=L->next;
while(p!=NULL&&k<i){
p=p->next;
i++;
}
return p;
}
bool DLinkList_create(DLinkList &L){
int x;DNode *r;
L->prior=NULL;
L->next=NULL;
scanf("%d",&x);
while(x!=-1){
r=(DNode *)malloc(sizeof(DNode));
r->data=x;
r->prior=L;
r->next=L->next;
L->next=r;
}
return true;
}
bool del_LinkList(LinkList &L,int i,LNode &x){
LNode *pre,*p;
if (i<1){
return false;
}
if ((pre=GetElem(L,i-1))==NULL)
{
return false;
}
p=pre->next;
pre->next=p->next;
free(p);
return true;
}
bool Insert_tail_2(LinkList &L,ElemType x,int i){
LNode *pre,*p;
if ((pre=GetElem(L,i))!=NULL)
{
return false;
}
p=(LNode *)malloc(sizeof(LNode));
p->data=x;
p->next=pre->next;
pre->next=p;
return true;
}
bool Insert_head(LinkList &L,ElemType x,int i){
LNode *pre,*p;
if ((pre=GetElem(L,i-1))==NULL)
{
return false;
}
p=(LNode *)malloc(sizeof(LNode));
p->data=x;
p->next=pre->next;
pre->next=p;
return true;
}
int GetLength(LinkList L){
int i=0;
while(L->next!=NULL){
i++;
}
return i;
}
LNode *GetElem(LinkList L,int i){
LNode *p=L->next;
int k=1;
if (i==0)
{
return L;
}
if (i<1)
{
return NULL;
}
while(p!=NULL&&k<i){
p=p->next;
k++;
}
return p;
}
LNode *LocateElem(LinkList L,ElemType x){
LNode *p=L->next;
while(p!=NULL&&p->data!=x){
p=p->next;
}
return p;
}
LinkList ListInsert_head(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
LNode *p;
int x;
L->next=NULL;
scanf("%d",&x);
while(x!=-1){
p=(LNode *)malloc(sizeof(LNode));
p->data=x;
p->next=L->next;
L->next=p;
scanf("%d",&x);
}
}
LinkList ListInsert_tail(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
int x;
LNode *q,*p;
p=L;
scanf("%d",&x);
while(x!=-1){
q=(LNode *)malloc(sizeof(LNode));
q->data=x;
p->next=q;
p=q;
scanf("%d",&x);
}
p->next=NULL;
return L;
}
int main()
{
return 0;
}
按照《数据结构》和《王道2015数据结构》实现