顺序表——链接表示

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


struct Node;
typedef struct Node *PNde;
struct Node{
    int info;
    PNde link;
};
typedef struct Node *LinkList;




LinkList clist(int n)
{
    PNde p,h,s;
    int i;
    h=(PNde)malloc(sizeof(struct Node));
    if(h==NULL) return 0;
    h->link=NULL;
    p=h;
    for(i=1;i<=n;i++)
    {
        s= (PNde) malloc(sizeof(struct Node));
        if(s==NULL) return 0;
        p->link=s;
        s->info=i;
        s->link=NULL;
        p=s;
    }
    return(h);
}
void PrintList(LinkList h)
{
    LinkList p;
    p=h->link;
    printf("\n");
    while(p)
        {
            printf("%d",p->info);
            p=p->link;
            printf(" ");
        }
}




int insertPost_link(LinkList llist,int i,int x,int n){
    PNde q,p;
    int j;
    if(i<1 || i>n+1)
        printf("错误\n");
    else
    {
        j=0;
        p=llist;
        while(j<i-1)
        {
            p=p->link;
            j++;
        }
        q=(PNde)malloc(sizeof(struct Node));
        q->info=x;
        q->link=p->link;
        p->link=q;
  }
  return 0;
}




int deleteV_link(LinkList llist,int x)
{
    PNde p,q;
    p=llist;
    if(p==NULL) return 0;
    while(p->link!=NULL&&p->link->info!=x)
        p=p->link;
    if(p->link==NULL){
        printf("错误!\n");return 0;
    }
    else{
        q=p->link;
        p->link=q->link;
        free(q);return 1;
    }
}




int locate_link(LinkList llist,int x){
    PNde p,q;
    p=llist;
    if(p==NULL) return 0;
    while(p->link!=NULL&&p->link->info!=x)
        p=p->link;
    if(p->link==NULL){
        printf("不存在%d\n",x);return 0;
    }
    else{
        q=p->link;
        printf("%d",q->info);
        return 0;
    }
}
int modify_link(LinkList llist,int x,int i)
{
   PNde p,q;
    p=llist;
    if(p==NULL) return 0;
    while(p->link!=NULL&&p->link->info!=x)
        p=p->link;
    if(p->link==NULL){
        printf("Not exist!\n");return 0;
    }
    else{
        q=p->link;
        q->info=i;
        return 0;
    }
}




int main()
{
    int number;
    printf("请输入链表个数:");
    scanf("%d",&number);
    printf("\n");
    PNde head;
    head=clist(number);
    PrintList(head);
    printf("\n");
    printf("\n");
    int i;
    while(1)
    {
        printf("\n");
        printf("请选择操作:1、插入 2、删除 3、查找 4、修改 \n");
        printf("\n");
        scanf("%d",&i);
        printf("\n");
        switch(i)
        {
            case 1:
                printf("请输入要插入的位置和值:\n");
                printf("\n");
                int a,b;
                scanf("%d %d",&a,&b);
                printf("\n");
                int A;
                A=insertPost_link(head,a,b,number);
                number++;
                break;
            case 2:
                printf("请输入要删除的值:");
                printf("\n");
                int c;
                scanf("%d",&c);
                printf("\n");
                int D;
                D=deleteV_link(head,c);
                number--;
                break;
            case 3:
                printf("请输入查找的值:");
                printf("\n");
                int d;
                scanf("%d",&d);
                printf("----\n");
                int L;
                L=locate_link(head,d);
                printf("\n");
                break;
            case 4:
                printf("请输入你需要更改的数值和内容:");
                printf("\n");
                int f,g;
                scanf("%d %d",&f,&g);
                printf("\n");
                int X;
                X=modify_link(head,f,g);
                break;


            default:
                printf("输入错误!");
        }
        PrintList(head);
        printf("\n");
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值