天天看點

c語言.順序表。連結清單代碼codeblock16.01

#include <stdio.h>

#include <stdlib.h>

//結構體

typedef struct node

{

int data;

struct node *next;

} linklist;

//建立節點

linklist * createnode(int n)

{

linklist *l;

l=(linklist *)malloc(sizeof(linklist));

l->data=n;

l->next=NULL;

return l;

}

//初始化頭結點

linklist * initlink()

{

linklist *head;

head=(linklist *)malloc(sizeof(linklist));

head->next=NULL;

return head;

}

//建立單連結清單(尾插法)

linklist *createlink()

{

linklist *cur,*new,*head;

int i,n,x;

head=initlink();

if(head==NULL)

{

return NULL;

}

cur=head;

printf("請輸傳入連結表長度:");

scanf("%d",&x);

for(i=0;i<x;i++)

{

   printf("請輸入資料:");

scanf("%d",&n);

new=createnode(n);

cur->next=new;

cur=cur->next;

}

return head;

}

//查找第j個結點,用e傳回結點裡的值

int searchnode(linklist *head,int j,int *e)

{

    linklist *l=head->next;

    int i=1;

    while(l&&i<j)

    {

        l=l->next;

        i++;

    }

    if(l==NULL||i!=j)

    {

        return 0;

    }

    *e=l->data;

    return 1;

}

//查找

int searchnode1(linklist *head,int e)

{

    int i=0;

    linklist *l=head;

    while(l->next)

    {

        l=l->next;

        i++;

        if(e==l->data)

        {

            return i;

        }

    }

    return 0;

}

//插入

int ListInsert(linklist *head,int i,int e)

{

    linklist *p,*new;

    int j;

    p=head;

    j=1;

    while(p&&j<i)

    {

        p=p->next;

        j++;

    }

    if(!p||j>i)

    {

        return 0;

    }

    new=(linklist *)malloc(sizeof(linklist));

    new->data=e;

    new->next=p->next;

    p->next=new;

    return 1;

}

//删除

int listdel(linklist *head,int i,int *e)

{

    int j=1;

    linklist *p=head,*q;

    while(p->next&&j<i)

    {

        p=p->next;

        j++;

    }

    if(!(p->next)||j>i)

    {

        return 0;

    }

    q=p->next;

    p->next=q->next;

    *e=q->data;

    free(q);

    return 1;

}

//列印單連結清單

void print(linklist *head)

{

    linklist *p;

    p=head;

    while(p->next)

    {

        p=p->next;

        printf("%d",p->data);

    }

}

//主函數

int main()

{

int a,b,c,i;

linklist *head;

head=createlink();

if(head==NULL)

{

printf("建立失敗!\n");

}

else

{

printf("建立成功!\n");

}

printf("請輸入你要查找結點的位置:");

scanf("%d",&c);

a=searchnode(head,c,&b);

if(a==0)

    {

        printf("查找失敗!\n");

}

else

{

printf("查找成功!\n");

printf("b=%d\n",b);

}

printf("請輸入你要查找的資料:");

scanf("%d",&c);

a=searchnode1(head,c);

if(a==0)

    {

        printf("查找失敗!\n");

}

else

{

printf("查找成功!\n");

printf("a=%d\n",a);

}

printf("請輸入插入的位置:");

scanf("%d",&c);

printf("請輸入插入的資料:");

scanf("%d",&b);

a=ListInsert(head,c,b);

if(a==0)

    {

        printf("插入失敗!\n");

}

else

{

printf("插入成功!\n");

}

print(head);

printf("請輸入删除的位置:");

scanf("%d",&c);

a=listdel(head,c,&b);

if(a==0)

    {

        printf("删除失敗!\n");

}

else

{

printf("删除成功!\n");

}

print(head);

return 0;

}

繼續閱讀