链表

数据结构链表

//consts.h

#include<string.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdio.h>
#include<limits.h>
#include<io.h>
#include<math.h>
#include<process.h>

#define TRUR 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define INFEASIBLE -1

//linklist.h

#ifndef   MY_H_FILE      
#define   MY_H_FILE     
#include"consts.h"
#endif  


typedef char DataType;
typedef struct node
{
    DataType data;
    struct node *next;
}LinkedList;

//linklist.cpp

 #ifndef   MY_LCPP_FILE      
#define   MY_LCPP_FILE     
#include"linklist.h"
#endif  

void InitLlist(LinkedList *L)
{
    L->next=NULL;
}

int GetLListLength(LinkedList *L)
{
    LinkedList *p;
    int j;
    p=L->next;
    j=0;
    while(p!=NULL)
    {
        p=p->next;
        j++;
    }
    return j;
}

LinkedList *GetLListElem(LinkedList *L,int i)
{
    int j;
    LinkedList *p;
    p=L;
    j=0;
    while((p->next!=NULL)&&(j<i))
    {
        p=p->next;
        j++;
    }
    if(i=j)
    {
        return p;
    }
    else
        return NULL;
}

LinkedList *LocateLListElem(LinkedList *L,DataType key)
{
    LinkedList *p;
    p=L->next;
    while(p!=NULL)
    {
        if(p->data!=key)
        {
            p=p->next;
        }
        else
            break;
    }
    return p;
}

int InsertLList(LinkedList *L,int i,DataType x)
{
    LinkedList *pre,*s;
    int k;
    pre=L;
    k=0;
    while(pre!=NULL && k<i-1)
    {
        pre=pre->next;
        k=k+1;
    }
    if(!pre)
    {
        printf("插入位置不合理");
        return ERROR;
    }
    s=(LinkedList*)malloc(sizeof(LinkedList));
    s->data=x;
    s->next=pre->next;
    pre->next=s;
    return OK;
}

int DeleteLList(LinkedList *L,int i,DataType *e)
{
    LinkedList *pre,*r;
    int k;
    pre=L;
    k=0;
    while(pre->next!=NULL && k<i-1)
    {
        pre=pre->next;
        k++;
    }
    if(!(pre->next))
    {
        printf("删除的位置不合理");
        return ERROR;
    }
    r=pre->next;
    pre->next=pre->next->next;
    *e=r->data;
    free(r);
    printf("成功删除结点");
    return OK;
}

LinkedList *CreateLListR()
{
    char ch;
    LinkedList *head,*s,*r;
    head=(LinkedList*)malloc(sizeof(LinkedList));
    r=head;
    ch=getchar();
    while(ch!='$')
    {
        s=(LinkedList*)malloc(sizeof(LinkedList));
        s->data=ch;
        r->next=s;
        r=s;
        ch=getchar();
    }
    r->next=NULL;
    return head;
}

void PrintLList(LinkedList *q)
{
    LinkedList *p;
    p=q->next;
    printf("字符单链表结果是:\n");
    while(p!=NULL)
    {
        printf("%5c",p->data);
        p=p->next;
    }
    printf("\b\n");
}

int main()
{
    LinkedList *a,*p;
    int length,node,i,j;
    char value,q;
    printf("\t输入字符串,以$结束:\n");
    a=CreateLListR();
    PrintLList(a);
    length=GetLListLength(a);
    printf("该表长度为:%d\n",length);
    printf("请输入取第几个结点:\n");
    scanf("%d",&node);
    p=GetLListElem(a,node);
    if(p==NULL)
        printf("表中没有该节点\n");
    else
        printf("该节点的数据域为:%c\n",p->data);
    printf("请输入要插入的位置和值:\n");
    scanf("%d",&i);
    getchar();
    scanf("%c",&value);
    InsertLList(a,i,value);
    PrintLList(a);
    printf("请输入要删除的位置\n");
    scanf("%d",&j);
    DeleteLList(a,j,&q);
    PrintLList(a);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值