数据结构 链表的实现(C语言)

来源:互联网 发布:网络硬盘播放器 编辑:程序博客网 时间:2024/04/19 13:27
#include <stdio.h>#include <stdlib.h>#include <malloc.h>/*   单链表*//* run this program using the console pauser or add your own getch, system("pause") or input loop */typedef struct LNode{    int data;            //数据域    struct LNode * next;    //指针域    }LNode,*LinkList;//创建(后插法)LinkList create(){    int i;    int len;    int val;        LinkList list = (LinkList)malloc(sizeof(LNode));    if(list==NULL){        printf("内存分配失败\n");        exit(-1);    }    list->next = NULL;    printf("长度为:");    scanf("%d",&len);    printf("\n");    LinkList r = list;    for(i=0;i<len;i++){        LinkList p = (LinkList)malloc(sizeof(LNode));        printf("数据为:");        scanf("%d",&val);        p->data = val;        p->next = NULL;        r->next = p;        r = p;    }    return list;}//遍历void traverse(LinkList list){    while(list->next!=NULL){        printf("%d ",list->next->data);        list = list->next;    }}//取值int getEle(LinkList list,int i ){    LinkList p = list;    //p指向头结点      int j = 0;    if(i<0||p->next == NULL){        printf("i不合法或链表为空");        exit(-1);    }    while(p->next&&j<i){        p = p->next;        ++j;    }    int e = p->data;    return e;    }//插入void insert(LinkList list,int i,int val){    LinkList p = list;    int j = 0;    while(p->next&&j<i-1){        p = p->next;        ++j;    }    if(!p->next||j>i-1){        printf("i不合法\n");    }    LinkList s = (LinkList)malloc(sizeof(LNode));    s->data = val;    s->next = p->next;    p->next = s;}//删除void deleteEle(LinkList list,int i){    LinkList p = list;    int j =0;    while(p->next&&j<i-1){        p = p->next;        ++j;    }    if(!p->next||j>i-1){        printf("i不合法");    }    LinkList s = p->next;    p->next = s->next;    free(s);}//按值查找序号(地址)void LocateElem(LinkList list,int ele){    LinkList p = list;    while(p->next!=NULL){        p = p->next;        if(ele == p->data){            printf("%p",p);        }    }}//计算长度int getLength(LinkList list){    LinkList p = list->next;    int j = 0;    while(p!=NULL){        ++j;        p = p->next;    }    return j;}int main(int argc, char *argv[]) {    LinkList list = NULL;    list = create(list);    //insert(list,1,222);    //deleteEle(list,2);    traverse(list);    //int e = getEle(list,3);    //LocateElem(list,3);    //int len = getLength(list);    //printf("length = %d",len);    return 0;}


1 0