线性表的链式表示及相关运算(C语言实现)
文章目录
一.链表的抽象结构体定义
二.链表的基本操作
1.链表的抽象结构体定义
#include <stdlib.h>
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
} Node, *LinkList;
2.初始化链表
int InitiateLinkList() {
LinkList head;
head = malloc(sizeof(Node));
head->next = NULL;
return head;
}
3.基本运算:求表长
int LengthLinkList(LinkList head){
Node *p = head;
int count = 0;
while (p->next != NULL){
p = p->next;
count++;
}
return count;
}
4-1.基本运算:查找元素(按值查找)
int GetLinkList(LinkList head, int i) {
Node *p;
p = head->next;
int index = 1;
while ((index < i) && (p != NULL)) {
p = p->next;
index++;
}
if (index == i)
return p;
else
return NULL;
}
4-2.基本运算:查找元素(按元素查找)
int LocateLinkList(LinkList head, ElemType edata) {
Node *p = head;
p = p->next;
int i = 0;
while (p != NULL && p->data != edata) {
i++;
p = p->next;
}
if (p != NULL)
return i+1;
else
return 0;
}
5.基本运算:插入元素
void InsertLinkList(LinkList head, ElemType edata, int i) {
Node *p, *q;
if (i == 1)
q = head;
else
q = GetLinkList(head, i - 1);
if (q == NULL)
exit("NULL");
else {
p = malloc(sizeof(Node));
p->data = edata;
p->next = q->next;
q->next = p;
}
}
6.基本运算:删除元素
void DeleteLinkList(LinkList head, int i) {
Node *q, *p;
if (i == 1)
q = head;
else
q = GetLinkList(head, i - 1);
if (q != NULL && q->next != NULL) {
p = q->next;
q->next = p->next;
free(p);
} else
exit("NULL");
}