数据结构单链表
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;//单链表
} Node;
typedef struct Node * LinkList;// 声明头指针
Status GetElem(LinkList L, int i, ElemType *e)//获取元素
{
int j;
LinkList p;
p = L->next; /* 让p指向链表L的第一个结点 */
j = 1; /* j为计数器 */
while (p && j < i)
{
p = p->next; /* 让p指向下一个结点 */
++j;
}
if (!p || j > i)
{
return ERROR; /* 第i个结点不存在 */
}
*e = p->data; /* 取第i个结点的数据 */
return OK;
}
/**
单链表插入
*/
Status ListInsert(LinkList *L, int i, ElemType e)
{
int j;
LinkList p, s;
p = *L;
j = 1;
while (p && j < i) /* 寻找第i-1个结点 */
{
p = (*p).next;
++j;
}
if (!p || j > i)
{
return ERROR;
}
s = (LinkList)malloc(sizeof(Node)); /* 生成新结点 */
(*s).data = e;
(*s).next = (*p).next; /* 将p的后继结点赋值给s的后继 */
(*p).next = s; /* 将s赋值给p的后继 */
return OK;
}
/**
链表删除
*/
Status ListDelete(LinkList *L, int i, ElemType *e)
{
int j;
LinkList p, q;
p = *L;
j = 1;
while (p->next && j < i) /* 遍历寻找第i-1个结点 */
{
p = p->next;
++j;
}
if (!(p->next) || j > i)
{
return ERROR; /* 第i个结点不存在 */
}
q = p->next;
p->next = q->next; /* 将q的后继赋值给p的后继 */
*e = q->data; /* 将q结点中的数据给e */
free(q); /* 让系统回收此结点,释放内存 */
return OK;
}
int main(void)
{
LinkList l;
ListInsert(&l,1,4);
ListInsert(&l,2,8);
return 0;
}