Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119365
  • 博文数量: 41
  • 博客积分: 1695
  • 博客等级: 上尉
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-21 22:50
文章分类

全部博文(41)

文章存档

2010年(1)

2007年(23)

2006年(17)

我的朋友

分类: C/C++

2006-12-21 00:41:26

//Author: Guo R.H
//Date:06.12.23
//USTC

#include
#include
#define LEN sizeof(DList)

typedef struct DList
{
    int data;
    struct DList *prior, *next;
}DList;
void InitList(DList **head)
{
    *head = (DList *)malloc(LEN);
    if(*head)
        (*head)->next = (*head)->prior = *head;
    else
        exit(0);
}
int ListLength(DList *head)
{
    if(!head)
    {
        printf("empty list!");
        return 0;
    }
    DList *p = head->next;
    int i=0;
    while(p != head)
    {
        i++;
        p = p->next;
    }
    return i;
}
DList *GetP(DList *head, int i)
{
    if(i<0 || i>ListLength(head))
        return NULL;
    DList *p=head;
    int j;
    for(j=0; j        p = p->next;
    return p;
}
void Insert(DList *head, int i, int t)
{
    if(i<1 || i>ListLength(head)+1)
    {
        printf("Insert error\n");
        exit(0);
    }
    int j=0;
    DList *p, *s = GetP(head, i-1);
    if(!s)
    {
        printf("error\n");
        exit(0);
    }
    p=(DList *)malloc(LEN);
    if(!p)
    {
        printf("error\n");
        exit(0);
    }
    p->data = t;
    p->prior = s;
    p->next = s->next;
    s->next->prior = p;
    s->next = p;
    
   
}
void print1(DList *head)
{
    DList *p = head->next;
    while(p != head)
    {
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
}
void print2(DList *head)
{
    DList *p = head->prior;
    while(p != head)
    {
        printf("%d ",p->data);
        p = p->prior;
    }
    printf("\n");
}

int main()
{
    DList *head;
    int i;
    InitList(&head);
    for(i=0; i<5; i++)
        Insert(head, i+1, i+1);
    print1(head);
    print2(head);
   
    return 0;
}
阅读(1245) | 评论(0) | 转发(0) |
0

上一篇:栈创建和操作

下一篇:递归求最大值

给主人留下些什么吧!~~