数据结构练手

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define flag 0
typedef int ElemType ;
typedef struct Lnode
{
    int data ;
    struct Lnode *next;


}Lnode,*LinkList;
Lnode *Get_LinkList(LinkList L, int i)
{
    Lnode *p=L;
    int j=0;
    while (p!=NULL&&j<i){p=p->next;j++;}
    return p;


}
int Locate_LinkList(LinkList L,int x)
{
    LinkList p;
    int j=1;
    p=L->next;
    while (p!=NULL&&p->data!=x)
    {
        p=p-> next;j++;


    }if(p)
    {
        printf("%d在链表中,是第%d个元素.\n",p->data,j);
        return j;


    }
    else {
        printf("该数值不在链表中。\n");
        return 0;
    }
}
int Insert_LinkList(LinkList &L,int i,int x)
{
    Lnode *p, *s;
    p=Get_LinkList(L,i);
    if(p==NULL)
    {
        printf("参数i输入有误!\n");
        return 0;


    }
    else {
        s=(Lnode*)malloc( sizeof (Lnode));
        s->data=x;
        s->next =p->next;
        p->next=s;
        return 1;


    }
}
int Delete_LinkList(LinkList L,int i)
{
    LinkList p,s;
    p=Get_LinkList(L,i-1);
    if(p==NULL)
    {
        printf("待删结点前结点不存在!\n");
        return -1;


    }
    else if (p->next==NULL){
        printf("该待删节点不存在!\n");
        return 0;


    }
    else {
        s=p->next;
        p->next=s->next;
        free(s);
        return 1;
    }
}
void Create_LinkList (LinkList &L,int n)
{
    int i;
    LinkList p;
    L=(LinkList)malloc(sizeof (Lnode))
;
L->next =NULL;
for (i=n;i>0;--i){
    p=(LinkList)malloc(sizeof(Lnode));
    p->data=i;
    p->next=L->next;
    L->next=p;


}
}
void Display_LinkList(LinkList L)
{
    LinkList p;
    p=L;
    while(p->next ){printf("%d  ",p->next->data);
    p=p->next;}
}
int  main (int argc,char *argv[])
{
    printf("初始化\n建立单链表如下:\n");
    LinkList L;
    int x,y, cord ,i;
    Create_LinkList(L,4);
    Display_LinkList(L);
    do {
        printf("\n        主菜单      \n");
        printf("    1   尾插法插入元素到指定位置    \n");
        printf("    2   删除某一指定元素     \n");
        printf("    3   查找指定元素     \n");
        printf("    0   结束程序    \n");
        printf("-------------------------------------\n");
        printf("请输入您选择的菜单号<1,2,3,0>:\n");
        scanf ("%d",&cord);
        switch (cord)
        {
        case 1:
            printf("请输入插入元素位置序号 i :");
            scanf("%d",&x);
            printf("请输入插入的数据 y :");
            scanf("%d",&y);
            Insert_LinkList(L,x,y);
            printf("单链表输出如下:\n");
            Display_LinkList(L);
            break;
        case 2:
            printf("请输入删除元素序号x=?");
            scanf("%d",&x);
            Delete_LinkList(L,x);
            printf("单链表输出如下:\n");
            Display_LinkList(L);
            break;
        case 3:
            printf("请输入查找元素值x: ");
            scanf("%d",&x);
            i=Locate_LinkList(L,x);
            break;
        case 0:
            exit(0);
            break;
        default:
            printf("输入有误!");




        }
    }while(cord <=3&&cord>=0);
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值