天天看点

顺序表之单向链表

这个应该没什么难度,源码如下,供大家参考

//exp2-2.c ---------------- 单链表
#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0

//===================ADT 单链表 结构说明 ======== 
typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct LNode *next;
}ListNode;
typedef ListNode *LinkList;

//=====================模块 定义==================
/* 内置 申 请节点函数  */
static LinkList newNode(){
	LinkList p = (LinkList)malloc(sizeof(ListNode));
	if(p != NULL)
		p->next = NULL;
	return p;
} 
//初始化 
void InitList(LinkList *L){
	*L = newNode();
	(*L)->next = NULL;
} 

//销毁表
void DestroyList(LinkList L){
	LinkList p = L;
	LinkList q = L->next;
	while(q != NULL){
		free(p);
		p = q;
		q = p->next;
	}
	free(p); 
} 
//判断表空
int ListEmpty(LinkList L){
	return L->next == NULL;
} 
//判断表长
int ListLength(LinkList L){
	int i = 0;
	LinkList p = L;
	while(p->next != NULL){
		i++;
		p = p->next;
	}
	return i;
} 
//输出表
void DispList(LinkList L){
	LinkList p = L->next;                        //指向数据节点 
	while(p != NULL){
		printf("%d ", p->data);
		p = p->next; 
	}
	printf("\n");
} 

//取元素
int GetElem(LinkList L, int i, ElemType *e){
	int j = 0;
	LinkList p = L;
	while(j < i && p != NULL){
		j++;
		p = p->next;
	}
	if(p == NULL)
		return ERROR;
	else{
		*e = p->data;
		return OK;
	}
} 
//求元素位置
int LocateElem(LinkList L, ElemType e){
	int i = 1;
	LinkList p = L->next;
	while(p != NULL && p->data != e){
		i++;
		p = p->next;
	}
	if(p == NULL)
		return ERROR;
	else
		return i;
} 

//插入元素
int InsertList(LinkList L, int i, ElemType e){
	LinkList p = L;
	LinkList pNew = NULL;
	int j = 0;
	while(j < i - 1 && p != NULL){            //查找前驱 
		j++;
		p = p->next;
	} 
	if(p == NULL)
		return ERROR;
	else{
		pNew = newNode();
		pNew->data = e;
		pNew->next = p->next;
		p->next = pNew;
		return OK;
	}
} 

//删除元素
int DeleteList(LinkList L, int i, ElemType *e){
	LinkList p = L;
	LinkList q = NULL;
	int j = 0;
	
	while(j < i - 1 && p != NULL){
		j++;
		p = p->next;
	}
	if(p == NULL)
		return ERROR;
	else{
		q = p->next;
		if(q == NULL)
			return ERROR;
		*e = q->data;
		p->next = q->next;
		free(q);
		return OK;		
	}
} 
           

继续阅读