单链表

2015-07-20 11:18:03 -0400
//============================================================================
// Name :main.cpp
// Author : zyw
// Version :
// Copyright : Your copyright notice
// Description : 单链表
//============================================================================

#include <stdio.h>
#include <malloc.h>

#define ERROR 0
#define OK 1

//数据域定义
typedef int ElemType;

//节点定义
typedef struct Node{
ElemType data;
struct Node* next;

}Node ,*LinkList;

void InitList(LinkList *L);
void CreateFromHead(LinkList L);
void CreatFromTail(LinkList L);
Node* Get(LinkList L,int i);
Node* Locate(LinkList L,ElemType i);
int GetLen(LinkList L);
int InsList(LinkList L,int i,ElemType e);

/*
*
*/
int InsList(LinkList L,int i,ElemType e){
Node* pre,*s;
int k;
if(i<k)
return ERROR;
pre=L;
k=0;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k++;
}
if(!pre)
{
puts("插入位置不合理");
return ERROR;
}
s=(Node*)malloc(sizeof(Node));
s->data=e;

s->next=pre->next;
pre->next=s;

return OK;
}

/*
* 获取链表的长度
* @L 链表头指针
*/
int GetLen(LinkList L){
Node * p;
p=L->next;
int j=0;
while(p->next!=NULL){
p=p->next;
j++;
}
return j;
}
/*
* 按数据获取节点
* @L 链表头指针
* @key 数据
*/
Node* Locate(LinkList L,ElemType key){
Node* p;
p=L->next;
while(p!=NULL){
if(p->data!=key)
p=p->next;
else
break;
return p;
}
}
/*
* 按索引获取节点
* @L 链表头指针
* @i 索引
*/
Node* Get(LinkList L,int i){

int j;
Node * p;
if(i<=0) return NULL;
p=L;j=0;
while((p->next!=NULL)&&(j<i)){
p=p->next;
j++;
}
if(i==j)
return p;
else
return NULL;
}
/*
* 尾插法创建链表
* @L 链表头指针
*/
void CreatFromTail(LinkList L)
{
Node *r,*s;
int flag=1;
//r用于指向表尾,初始时指向头节点
r=L;
char c;
while(flag){
c=getchar();
if(c!='$'){
//s表示一个节点的指针
s=(Node*)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;

}else{
flag=0;
r->next=NULL;
}
}
}


/*
* 头插法创建链表
* @L 链表头指针
*/
void CreateFromHead(LinkList L){
Node *s;
char c;
int flag=1;
while(flag){
c=getchar();
if(c!='$')
{
//s表示一个节点的指针
s=(Node*)malloc(sizeof(Node));
s->data=c;
//该节点等于头节点的指针,因为往头插嘛
s->next=L->next;
//头节点的指针域指向
L->next=s;
}else{
flag=0;
}
}
}

/*
* 初始化链表
* @L 链表头
*/
void InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
}
«Newer      Older»
Comment:
Name:

Back to home

Subscribe | Register | Login | N