最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
//线性表的链式存储结构
typedef struct Lnode
{
ElemType data;
struct Lnode *next;
}ListNode;
typedef ListNode *LinkList;
//单链表的查找运算
LinkList Locate (LinkList head, ElemType x)
{
LinkList p = head->next; //如果head带有头结点
while (p != NULL && x != p->date)
p = p->next;
return p
}
//单链表的插入操作
void InsertList (LinkList head, int i, ElemType x)
{
LinkList pre = head;
int k = 0;
while (pre != NULL && k++ < i - 1)
pre = pre->next;
if (k != i - 1 || NULL == pre)
cout << ("Error!");
else
{
p = (LinkList)molloc(sizeof(LinkList));
p->date = x;
p->next = pre->next;
pre->next = p;
}
}
//单链表的删除操作
void DelList (LinkList head, int i)
{
LinkList pre = head;
int k = 0;
while (pre->next != NULL && k++ < i)
pre = pre->next;
if (!(pre->next) && k <= i)
cout << ("Error!");
else
{
p = pre->next;
pre->next = p->next;
free(p);
}
}
//不带头结点的单链表的删除操作
LinkList DelList (LinkList head, int i)
{
if (NULL == head)
cout << ("Empty!");
if (0 == i)
{
p = head;
head = head->next;
free(p);
return head;
}
pre = head;
k = 0;
while (pre->next != NULL && k++ < i)
pre = pre->next;
if (!(pre->next) && k <= i)
cout << ("Error!");
else
{
p = pre->next;
pre->next = p->next;
free(p);
}
return head;
}
//循环单链表合并
void Mertge (LinkList ra, LinkList rb)
{
pra = ra->next;
while (pra->next != ra)
pra = pra->next;
prb = rb->next;
while (prb->next != rb)
prb = prb->next;
prb->next = ra;
pra->next = rb->next;
free(rb);
}
//双向链表
typedef struct DNode
{
ElemType data;
struct DNode *prior, *next;
}DoubleNode, *DoubleList;
//双向循环链表插入
void DLinkIns (DoubleList head, int i, ElemType x)
{
p = head->next;
int k = 0;
while (p != head && k++ < i)
p = p->next;
if (k != i)
cout << "Error!";
else
{
s = (DoubleList)malloc (sizeof(DoubleList));
s->data = x;
s->prior = p->prior;
p->prior->next = s;
s->next = p;
p->prior = s;
}
}