链表

来源:互联网 发布:unity3d 节点 编辑:程序博客网 时间:2024/06/06 05:47

数据结构链表

//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;}