作者在 2010-05-09 20:43:45 发布以下内容
单链表存储结构
typedef char ElemType;
typedef struct Listnode
{
DataType data;
struct ListNode *next;
} ListNode,*LinkList;
头插法建立单链表
int Creatlist(linklist &Head)
{
Head=(ListNode *)malloc(sizeof(ListNode));
Head->next=NULL;
while((ch=getch())!='\n')
{
p=(ListNode *)malloc(sizeof(ListNode));
if(!p)
{
printf("分配储存空间错误");
return -1;
}
p->data=ch;
p->next=Head->next;
Head->next=p;
}
return 1;
}
尾插法建立单链表
int Creatlist(LinkList &Head)
{
Head=(ListNode *)malloc(sizeof(ListNode));
Head->next=NULL;
ListNode *p,*rear;
rear=Head;
while((ch=getchar())!='\n')
{
p=(ListNode *)malloc(sizeof(ListNode));
if(!p)
{
printf("分配储存空间错误");
return -1;
}
p->data=ch;
p->next=rear->next;
rear->next=p;
rear=p;
}
rear->next=NULL;
return 1;
}
按序号查找
ListNode*LocateElem(LinkList,int i)
{
p=L->next; j=1;
while(p&&j<i)
{p=p->next;++j;}
if(!p||j>i) return NULL;
return p;
}
按值查找
ListNode*LocateElem(LinkList,DataType e)
{
p=L->next;
while(p&&p->data!=e)
{p=p->next;}
return p;
}
插入运算
int ListInsert(LinkList &L,int i,DataType e)
{
p=LocateElem(L,i-1);
if(p==NULL)
{printf("插入位置不合法"); return -1;}
s=(ListNode *)malloc(sizeof(ListNode));
if(!s)
{printf("分配储存空间失败"); return -1}
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
删除运算
int ListDelete(LinkList &L,int i,DataType &e)
{
p=LocateElem(L,i-1);
if(p==NULL||p->next==NULL)
{printf("删除位置不合法"); return -1;}
s=p->next; e=s->data; p->next=s->next; free(s);
return e;
}
typedef char ElemType;
typedef struct Listnode
{
DataType data;
struct ListNode *next;
} ListNode,*LinkList;
头插法建立单链表
int Creatlist(linklist &Head)
{
Head=(ListNode *)malloc(sizeof(ListNode));
Head->next=NULL;
while((ch=getch())!='\n')
{
p=(ListNode *)malloc(sizeof(ListNode));
if(!p)
{
printf("分配储存空间错误");
return -1;
}
p->data=ch;
p->next=Head->next;
Head->next=p;
}
return 1;
}
尾插法建立单链表
int Creatlist(LinkList &Head)
{
Head=(ListNode *)malloc(sizeof(ListNode));
Head->next=NULL;
ListNode *p,*rear;
rear=Head;
while((ch=getchar())!='\n')
{
p=(ListNode *)malloc(sizeof(ListNode));
if(!p)
{
printf("分配储存空间错误");
return -1;
}
p->data=ch;
p->next=rear->next;
rear->next=p;
rear=p;
}
rear->next=NULL;
return 1;
}
按序号查找
ListNode*LocateElem(LinkList,int i)
{
p=L->next; j=1;
while(p&&j<i)
{p=p->next;++j;}
if(!p||j>i) return NULL;
return p;
}
按值查找
ListNode*LocateElem(LinkList,DataType e)
{
p=L->next;
while(p&&p->data!=e)
{p=p->next;}
return p;
}
插入运算
int ListInsert(LinkList &L,int i,DataType e)
{
p=LocateElem(L,i-1);
if(p==NULL)
{printf("插入位置不合法"); return -1;}
s=(ListNode *)malloc(sizeof(ListNode));
if(!s)
{printf("分配储存空间失败"); return -1}
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
删除运算
int ListDelete(LinkList &L,int i,DataType &e)
{
p=LocateElem(L,i-1);
if(p==NULL||p->next==NULL)
{printf("删除位置不合法"); return -1;}
s=p->next; e=s->data; p->next=s->next; free(s);
return e;
}