循环链表的基本实现

来源:互联网 发布:java偏硬件的项目代码 编辑:程序博客网 时间:2024/06/05 21:54

双链表比单链表多了一个指针域,即next之外加一个front,指向上一个节点。实现一下看看

#include<stdio.h>#include<stdlib.h>struct Node;typedef  struct Node *position;typedef position List;struct Node{    position Front;    int Element;    position Next;};List Creat(List l);           //空链表position Find(int x, List l);           //寻找某个数的节点void Insert(int x,  List l);   //插入void DeleteList(List l);void Swap(List l, position p1, position p2);//p1->Next=p2;交换p1,p2。int IsEmpty(List l);int IsEmpty(List l){    return l->Next == NULL;}List Creat(List l){    l = (List)malloc(sizeof(struct Node));    if (l == NULL)        return NULL;    l->Front = l;    l->Next = l;    l->Element = -1;    return l;}void Insert(int x, List l){    position p;    p = (position)malloc(sizeof(struct Node));    p->Element = x;    p->Front = l->Front;    l->Front->Next = p;    l->Front = p;    p->Next = l;}position Find(int x, List l){    position p, tmp;    p = l->Next;    tmp = l->Front;    while (p != tmp)    {        if (p->Element == x)            return p;        else if (tmp->Element == x)            return tmp;    }    if (p->Element == x)        return p;    return NULL;}void DeleteList(List l){    if (!IsEmpty(l))    {        printf("empty list\n");        return;    }    position p, tmp;    p = l->Next;    while (p != l)    {        tmp = p->Next;        free(p);        p = tmp;                     }}void Swap(List l, position p1, position p2){    position p1f, p2n;    p2n = p2->Next;    p1f = p1->Front;    p1f->Next = p2;    p2->Front = p1f;    p2->Next = p1;    p1->Front = p2;    p1->Next = p2n;    p2n->Front = p1;}void PrintList(List l){    position p;    p = l->Next;    int n = 0;    while (p&&n<10)    {        printf("%d\n", p->Element);        p = p->Next;        n++;    }}
#include"循环链表.h"int main(){    List l = NULL;    l = Creat(l);    position p = l;    for (int i = 0; i < 4; i++)    {        Insert(i*i, l);        p = p->Next;    }    PrintList(l);    printf("交换第二个第三个元素\n");    position p1, p2;    p1 = l->Next->Next;    p2 = p1->Next;    Swap(l, p1, p2);    PrintList(l);    DeleteList(l);    printf("删除链表\n");    return 0;}

有错误或者遗漏的请指正,谢谢。

0 0