一个完整的,复制可直接运行的入门链表代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType; //或者: #define ElemType int
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode, *LinkList;
//创建单链表(头插法)
Status CreatListHead(LinkList& L, int n)
{
LinkList p;
int i;
srand(time(0));
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
for (i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(LNode));
p->data = rand() % 100 + 1;
printf("%d\n", p->data);
p->next = L->next;
L->next = p;
}
return OK;
}
//创建单链表(尾插法)
Status CreatListTail(LinkList& L, int n)
{
LinkList p, r;
int i;
srand(time(0));
L = (LinkList)malloc(sizeof(LNode));
r = L->next;
for (i = 0; i < n; i++)
{
p = (LinkList)malloc(sizeof(LNode));
p->data = rand() % 100 + 1;
r->next = p;
r = p;
}
r->next = NULL;
return OK;
}
//读取
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;
p = L->next;
j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p && j > i)
return ERROR;
s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
//删除
Status ListDelete(LinkList L, int i, ElemType* f)
{
int j;
LinkList p, q;
p = L;
j = 1;
while (p && j < i)
{
p = p->next;
++j;
}
if (!p || j > i)
return ERROR;
q = p->next;
p->next = q->next;
*f = q->data;
free(q);
return OK;
}
//整表删除
Status ClearList(LinkList L)
{
LinkList p, q;
p = L->next;
while (p)
{
q = p->next;
free(p);
p = q;
free(q);
}
L->next = NULL;
return OK;
}
int main()
{
LinkList L;
ElemType* x;
ElemType n;
x = &n;
CreatListHead(L, 10);
ListDelete(L, 1, x);
GetElem(L, 1, x);
printf("%d", *x);
return 0;
}