实现单链表的各种基本运算。
exp2-2.cpp
#include <stdio.h>
#include "SLinkNode.h"
int main()
{
ElemType e,a[5]={'a','b','c','d','e'},b[3]={'1','2','3'};
SLinkNode *h;
InitList(h);
CreateListR(h,&a[0],5);
printf("尾插法后的单链表h:");DispList(h);
// printf("单链表h的长度:%d\n",GetLength(h));
CreateListF(h,&b[0],3);
printf("头插法后的单链表h:");DispList(h);
printf("此时单链表h的长度:%d\n",GetLength(h));
int i=3;GetElem(h,i,e);
printf("单链表h中序号为%d的元素:%c\n",i,e);
e='a';
printf("元素'a'在链表h中的位置:%d\n",i);GetElem(h,i,e);
int j=4;e='*';
printf("第%d个元素位置上插入'*'元素\n",j);InsElem(h,e,j);
printf("插入'*'后的单链表h:");DispList(h);
int x=3;
printf("删除h中第%d个元素\n",x);DelElem(h,x);
printf("删除第%d个元素后的单链表h:",x);DispList(h);
DestroyList(h);
}
SLinkNode.h
#include <iostream>
#include<stdlib.h>
typedef char ElemType;
typedef struct node
{
ElemType data;
struct node *next;
} SLinkNode;
void InitList(SLinkNode *&L)
{
L=(SLinkNode * )malloc(sizeof(SLinkNode));
L->next=NULL;
}
void DestroyList(SLinkNode *&L)
{
SLinkNode *pre=L,*p=pre->next;
while (p!=NULL)
{
free(pre);
pre=p;p=p->next;
}
free(pre);
}
int GetLength(SLinkNode *L)
{
int i=0;
SLinkNode *p=L->next;
while (p!=NULL)
{
i++;
p=p->next;
}
return i;
}
int GetElem(SLinkNode *L,int i,ElemType &e)
{
int j=0;
SLinkNode *p=L;
if (i<=0) return 0;
while (p!=NULL && j<i)
{
j++;
p=p->next;
}
if (p==NULL) return 0;
else
{
e=p->data;
return 1;
}
}
int Locate(SLinkNode *L,ElemType e)
{
SLinkNode *p=L->next;
int j=1;
while (p!=NULL && p->data!=e)
{
p=p->next;
j++;
}
if (p==NULL) return(0);
else return(j);
}
int InsElem(SLinkNode *&L,ElemType x,int i)
{
int j=0;
SLinkNode *p=L, *s;
if (i<=0) return 0;
while (p!=NULL && j<i-1)
{
j++;
p=p->next;
}
if (p==NULL)
return 0;
else
{
s=(SLinkNode *)malloc(sizeof(SLinkNode));
s->data=x;
s->next=p->next;
p->next=s;
return 1;
}
}
int DelElem(SLinkNode *&L,int i)
{
int j=0;
SLinkNode *p=L,*q;
if (i<=0) return 0;
while (p!=NULL && j<i-1)
{
j++;
p=p->next;
}
if (p==NULL) return 0;
else
{
q=p->next;
if (q==NULL) return 0;
else
{
p->next=q->next;
free(q);
return 1;
}
}
}
void DispList(SLinkNode *L)
{
SLinkNode *p=L->next;
while (p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
void CreateListF(SLinkNode *&L,ElemType a[],int n)
{
SLinkNode *s;int i;
// L=(SLinkNode *)malloc(sizeof(SLinkNode));
// L->next=NULL;
for (i=0;i<n;i++)
{
s=(SLinkNode *)malloc(sizeof(SLinkNode)); //c++中使用malloc()时,出现error: 'malloc' was not declared in this scope解决方法:引入stdlib.h 。#include<stdlib.h>
s->data=a[i];
s->next=L->next;
L->next=s;
}
}
void CreateListR(SLinkNode *&L,ElemType a[],int n)
{
SLinkNode *s,*tc;int i;
L=(SLinkNode *)malloc(sizeof(SLinkNode));
tc=L;
for (i=0;i<n;i++)
{
s=(SLinkNode *)malloc(sizeof(SLinkNode));
s->data=a[i];
tc->next=s;
tc=s;
}
tc->next=NULL;
}