一、单链表
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define ElemType int
#define Status int
#define OK 1
#define ERROR 0
线性链表结构
typedef struct Node
{
ElemType data;
struct Node *next;
}Node, *LinkList;
获取元素
Status GetElem(LinkList L, int i, ElemType *e)
{
int j;
LinkList p;
p = L->next;
j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p || j > i)
{
return ERROR;
}
*e = p->data;
return OK;
}
链表插入元素
Status ListInsert(LinkList *L, int i, ElemType e)
{
int j;
LinkList p, s;
j = 1;
p = *L;
while (p && j < i)
{
p = p->next;
}
if (!p || j > i)
{
return ERROR;
}
s = (LinkList)malloc(sizeof(Node));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
链表删除元素
Status ListInsert(LinkList *L, int i, ElemType *e)
{
int j;
LinkList p, q;
j = 1;
p = *L;
while (p && j < i)
{
p = p->next;
}
if (!p || j > i)
{
return ERROR;
}
q = p->next;
p->next = q->next;
*e = q->data;
free(q);
return OK;
}
头插法创建链表
void CreateListHead(LinkList *L, int n)
{
LinkList p;
int i;
srand(time(0)); // 初始化随机数种子
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
for ( i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand() % 100;
p->next = (*L)->next;
(*L)->next = p;
}
}
尾插法创建链表
void CreateListTail(LinkList *L, int n)
{
LinkList p, r;
int i;
srand(time(0)); // 初始化随机数种子
*L = (LinkList)malloc(sizeof(Node));
r = *L;
for ( i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(Node));
p->data = rand() % 100;
r->next = p;
r = p; // 将r放到尾部p处为新的结点插入做准备,此时p == r
}
}
单链表销毁
Status ClearList(LinkList *L)
{
LinkList p, q;
p = (*L)->next;
while (p)
{
q = p->next;
free(p);
p = q;
}
(*L)->next = NULL;
return OK;
}
二、静态链表
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define MAXSIZE 1000
#define ElemType int
#define Status int
#define OK 1
#define ERROR 0
静态链表结构
typedef struct{
ElemType data;
int cur; // 游标
} Component, StaticLinkList[MAXSIZE];
初始化静态链表
Status InitList(StaticLinkList space){
int i;
for(i = 0; i < MAXSIZE; i++)
space[i].cur = i + 1;
space[MAXSIZE - 1].cur = 0; // 最后指向0
return OK;
}
插入数据
int Malloc_SLL(StaticLinkList space){
int i = space[0].cur;
if(space[0].cur)
space[0].cur = space[i].cur;
return i;
}
Status ListInsert(StaticLinkList L, int i, ElemType e){
int i, k, l;
k = MAXSIZE - 1;
if(i < 1 || i > ListLength(L) + 1){
return ERROR;
}
j = Malloc_SLL(L);
if(j){
L[j].data = e;
for(l = 1; l <= i - 1; l++){
k = L[k].cur;
}
L[j].cur = L[k].cur;
L[k].cur = j;
return OK;
}
return ERROR;
}
删除元素
Status ListDelete(StaticLinkList L, int i){
int j, k;
if(i < 1 || i > ListLength(L)){
return ERROR;
}
k = MAXSIZE - 1;
for(j = 1; j <= i -1; j++){
k = L[k].cur;
}
j = L[k].cur;
L[k].cur = L[j].cur;
Free_SLL(L, j);
return OK;
}
三、题目