双向循环链表基本操作(C语言)

来源:互联网 发布:squid linux 下载 编辑:程序博客网 时间:2024/04/28 00:44

全自己写的哦,没有看书哦吐舌头


#include<stdio.h>#include<stdlib.h>#define OK 1#define ElemType inttypedef int Status;    typedef struct DuLNode{    ElemType data;    struct DuLNode *prior;    struct DuLNode *next;}DuLNode,*DuLinkList;//建表void Creat(DuLinkList &L,int n){    L=(DuLinkList)malloc(sizeof(DuLNode));    L->next=L;    L->prior=L;    DuLinkList p;    int i;    for(i=0;i<n;i++)    {        p=(DuLinkList)malloc(sizeof(DuLNode));        scanf("%d",&(p->data));        p->next=L->next;        p->prior=L;        L->next=p;        p->next->prior=p;        if(i==0) L->prior=p;    }}//正序遍历void TravserFIFO(DuLinkList L)   {    DuLinkList p;    p=L->prior;    for(;p!=L;)    {        printf("%d ",p->data);        p=p->prior;    }    printf("\n");} //倒序遍历void TravserLIFO(DuLinkList L) {    DuLinkList p;    p=L->next;    for(;p!=L;)    {        printf("%d ",p->data);        p=p->next ;    }    printf("\n");}//插入Status Insert(DuLinkList &L,int i,int e)   {    DuLinkList s,p;    p=L;    s=(DuLinkList )malloc(sizeof(DuLNode));       s->data=e;    int j;    for(j=0;j<i-1;j++)    {        p=p->prior ;    }    p->prior->next=s;    s->prior=p->prior;    s->next=p;    p->prior=s;    return OK;}//删除int Del(DuLinkList &L,int i)   {    DuLinkList p;    p=L;    int j,e;    for(j=0;j<i;j++)    {        p=p->prior ;    }    p->prior->next=p->next;    p->next->prior=p->prior;    e=p->data ;    free(p);    return e;}void main(){    DuLinkList L;    while(1){        printf("1. 构建双向循环链表\n");        printf("2. 正序遍历\n");        printf("3. 倒序遍历\n");        printf("4. 插入元素\n");        printf("5. 删除元素\n");        printf("0. 退出系统\n");        int c;        scanf("%d",&c);        switch(c)        {        case 1:{      //建表            int n;            printf("请输入要输入的元素数目\n");            scanf("%d",&n);            printf("请输入元素:\n");            Creat(L,n);            break;}        case 2:{TravserFIFO(L);break;}        case 3:{TravserLIFO(L); break;}        case 4:{            printf("请输入要输入的数据:\n");            int i,e;            scanf("%d",&e);            printf("请输入要插入的位置(正序):\n");            scanf("%d",&i);            Insert(L,i,e);            break;}        case 5:{            printf("请输入要删除的元素的位置(正序):\n");            int i,e;            scanf("%d",&i);            e=Del(L,i);            printf("%d已被删除\n",e);            break;}        case 0:exit (0);        }    }}




1 0
原创粉丝点击