现在的位置: 首页 > 综合 > 正文

链表的一些基本操作

2013年08月19日 ⁄ 综合 ⁄ 共 3185字 ⁄ 字号 评论关闭

#include <stdio.h>
#include <stdlib.h>

typedef struct list
{
    int data;
    struct list *ptr;
    }elem,*pelem;

typedef struct real
{
    struct list* head;
    unsigned size;
    }list,*plist;

void initialize(plist mylist)//初始化
{
    mylist->head=NULL;
    mylist->size=0;
    }
int creat(plist mylist1)//创建链表
{
    int i;
    pelem tmp=NULL;
    while(scanf("%d",&i))
        {
        pelem p1=(pelem)malloc(sizeof(elem));
        if(mylist1->head==NULL)
        {
            mylist1->head=p1;
                    p1->data=i;
                    mylist1->size++;
                    p1->ptr=NULL;
                    tmp=mylist1->head;

        }
        else
        {
            tmp->ptr=p1;
            p1->data=i;
            mylist1->size++;
            p1->ptr=NULL;
            tmp=tmp->ptr;
        }

        }
    //printf("%d\n",p1->data);
    return mylist1->size;
    }

int display(plist mylist)  //显示链表
{
    pelem p1=mylist->head;
    if(p1==NULL)
    {
        return -1;
    }
    else
    {
        while(p1!=NULL)
        {
            printf("%d\n",p1->data);
            p1=p1->ptr;
        }
    //return p1->data;
    }
    return 0;
}

int insert(plist mylist,int num)//链表的插入操作
{
        pelem p1=(pelem)malloc(sizeof(elem));
        pelem tmp=mylist->head;
        p1->data=111;
        p1->ptr=NULL;
        mylist->size++;
        if(num==0)
        {
            p1->ptr=tmp;
            mylist->head=p1;
        }
        else
        {
            while(num-1)
            {
                tmp=tmp->ptr;
                num--;
            }
            p1->ptr=tmp->ptr;
            tmp->ptr=p1;
        }
        return 0;
}

void remov(plist mylist,int value)//链表的删除
{
    pelem tmp=mylist->head;
    pelem tmp2=tmp->ptr;
    if(tmp->data==value)
    {
        mylist->head=tmp->ptr;
        free(tmp);

    }
    else
    {
        while(tmp2->data!=value&&tmp2!=NULL)
        {
            tmp2=tmp2->ptr;
            tmp=tmp->ptr;
        }
        tmp->ptr=tmp2->ptr;
        free(tmp2);

    }
}
void modify(plist mylist,int num)//链表的更改
{
    pelem p1=mylist->head;
    while(num-1)
    {
        p1=p1->ptr;
        num--;
    }
    p1->data=11;
    }
void distroy(plist mylist)//链表的销毁
{
    //pelem p1=mylist->head;
    pelem tmp=mylist->head;
    int i=0;
    while(i<mylist->size)
    {
        tmp=tmp->ptr;
        free(mylist->head);
        mylist->head=tmp;
        i++;
    }
}

void insertsort(plist mylist)//链表的插入排序
{
        pelem ptr1 = mylist->head->ptr;
        mylist->head->ptr = NULL;
        pelem tmp1 = ptr1->ptr;
        ptr1->ptr = NULL;
        pelem ptr2 = mylist->head;
        while(ptr1)
        {
            if(ptr1->data <= ptr2->data)
            {
                mylist->head = ptr1;
                ptr1->ptr = ptr2;
            }
            else if(ptr2->data <= ptr1->data && ptr2->ptr == NULL)
            {
                ptr2->ptr = ptr1;
                ptr1->ptr = NULL;
            }
            else if(ptr2->data < ptr1->data && ptr2->ptr->data > ptr1->data)
            {
                ptr1->ptr = ptr2->ptr;
                ptr2->ptr = ptr1;
            }
            else if(ptr2->data < ptr1->data && ptr2->ptr->data < ptr1->data)
            {
                ptr2 = ptr2->ptr;
                continue;

            }

             ptr1 = tmp1;
            if (tmp1 != NULL)
            {
                tmp1 = tmp1->ptr;
            }
            ptr2 = mylist->head;
        }
}

int main(void) {
    list m1;
  initialize(&m1);
  //initialize(&m2);
    printf("%d\n",creat(&m1));
    //display(&m1);
    //getchar();
    //printf("%d\n",creat(&m2));
    //display(&m2);
    //remov(&ml,3);
//    distroy(&ml);
    //modify(&ml,3);
    insertsort(&m1);
    display(&m1);
    return EXIT_SUCCESS;
}

抱歉!评论已关闭.