文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>LinkList_exercises

LinkList_exercises

时间:2010-07-22  来源:Codeplayer

/**************
** linkTest.h *
**************/
#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    char name[10];
    int age;
    struct node *next;
}LinkList;

#define Debug 0

LinkList * createLinkList();

LinkList * initInsert(LinkList * head, int insertNum);//initiate linklist

int lengthLinkList(LinkList * head);

void destroyLinkList(LinkList * head);

void traverseLinklist(LinkList * head);        //traversal

void reverse(LinkList *head);                //reverse

LinkList * insertList(LinkList * head, int dstNum); // insert data according to the position appointed.

LinkList * deleteLinklist(LinkList * head, int dstNum);


/**************
** linkFuncs.c *
**************/
#include "linkTest.h"

LinkList * createLinkList()
{
    LinkList * head;
    head = (LinkList *) malloc(sizeof(LinkList));
    head->next = NULL;
    return head;
}

LinkList * initInsert(LinkList * head, int insertNum)
{
    int i = 0;
    LinkList * ptrNode = NULL;
    LinkList * rear = head;
    for(; i < insertNum; i++)
    {   
        ptrNode = (LinkList *)malloc(sizeof(LinkList));
        printf("insert person.name person.age\n");

        scanf("%s %d",&ptrNode->name,&ptrNode->age);

        ptrNode->next = NULL;
        rear->next = ptrNode;
        rear = rear->next;
    }
}

int lengthUpdate(LinkList * head)
{
    int count = 0;
    LinkList * ptr = head;
    while(ptr->next != NULL)
    {
        ptr = ptr->next;
        count++;
    }
    printf("LinkList len = %d\n",count);
    head->age = count;
    return head->age+1;
}


void traverseLinklist(LinkList * head)
{
    LinkList * ptr = head->next;
    printf("person's name | person's age:\n");
    while(ptr->next != NULL)
    {
        printf("%s \t %d\n",ptr->name, ptr->age);
        ptr = ptr->next;
    }
        printf("%s \t %d\n",ptr->name, ptr->age);
}

void reverse(head)
LinkList * head;
{
    LinkList * ptr = head;
    LinkList * tempr = ptr;            //tempr->head; ptr->head;
    LinkList * rear = ptr->next;    //rear->(head->next)
    ptr->next = NULL;                //head break

    ptr = rear;
    rear = rear->next;
    ptr->next = NULL;                //2 isoluted points:head & 1st-node
    tempr = ptr;
    while(rear)
    {
        ptr = rear;
        rear = rear->next;
        ptr->next = tempr;
        tempr = ptr;
    }
    head->next = ptr;
}

LinkList * insertList(LinkList * head, int dstNum)
{
    int len = lengthUpdate(head);
    if(dstNum > len || dstNum <1)
    {
        printf("wrong position!\n");
        return 0;   
    }

    int current = 1;
    LinkList * ptr = head;

    LinkList * newnode = (LinkList *)malloc(sizeof(LinkList));

    printf("input: newperson's name | age\n");
    scanf("%s %d",&newnode->name, &newnode->age);

    while(current < dstNum)
    {
        ptr = ptr->next;
        current++;
    }
    newnode->next = ptr->next;
    ptr->next = newnode;

    return head;   
}

void destroyLinkList(LinkList * head)
{
    int len = lengthUpdate(head);
    LinkList * ptr = head;
    LinkList * fore =head;
    while(len>0)
    {
        ptr = fore->next;
        free(fore);
        fore = ptr;
        len--;
    }
    printf("LinkList has been destroyed\n");
}

LinkList * deleteLinkList(LinkList * head, int dstNum)
{
    LinkList * ptr = head;
    LinkList * qtr = NULL;
    int len = lengthUpdate(head);
    int current = 1;
    if(dstNum > len || dstNum <1)
    {
        printf("Wrong delete Number\n");
        return 0;
    }
   
    while(current < dstNum)
    {
        ptr = ptr->next;
        current ++;
    }
    qtr = ptr->next;
    ptr->next = qtr->next;
    free(qtr);
}



/**************
** linkTest.c *
**************/
#include "linkTest.h"

int main (argc,argv)
int argc;
char ** argv;
{
    if(argc<2)
    {
        printf("Usage:[xxx] [c]|[num]\n");
        return 0;
    }
/*********
* create *
*********/
    LinkList * head = NULL;

    if((*argv[1])== 'c')
            head = createLinkList();
    else
        {
            printf("bad parameters!\n");
            return 0;
        }
    int initNum = atoi(argv[2]);
    int dstNum;

    if(Debug)
        printf("insertNum = %d\n",initNum);

    initInsert(head,initNum);

    traverseLinklist(head);
/*********
*  opts  *
*********/
    printf("Choose insertPositon:\n");
    scanf("%d",&dstNum);
    printf("dstNum = %d\n",dstNum);
    insertList(head,dstNum);

    printf("Choose deletePositon:\n");
    scanf("%d",&dstNum);
    printf("dstNum = %d\n",dstNum);
    deleteLinkList(head,dstNum);
//    reverse(head);

    traverseLinklist(head);

    destroyLinkList(head);
}
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载