天天看点

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;

}

继续阅读