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;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值