美文网首页
数据结构c语言实现单链表

数据结构c语言实现单链表

作者: 甜柚小仙女 | 来源:发表于2019-01-27 12:07 被阅读0次
#include<stdio.h>
#include<stdlib.h>
#define ElemType int 
typedef struct Node{
    struct Node *next;
    ElemType data;
}Node,*LinkList;
    LinkList createLinkH(int n){ //头插法 
    Node *L;
    int x,i;
    //初始化 
    L = (Node*)malloc(sizeof(Node));
    L->next=NULL;
    printf("请输入元素:\n");
    for(i=0;i<n;i++){
        Node *p;
        p = (Node*)malloc(sizeof(Node));
        scanf("%d",&x);
        p->data = x;
        p->next = L->next;
        L->next = p;
    }
    return L;
}
LinkList createLinkR(int n){//尾插法 
    Node *L;
    Node *r;
    int i,x;
    L=(Node*)malloc(sizeof(Node));
    L->next=NULL;
    r = L;
    printf("请输入元素:\n");
    for(i=0;i<n;i++) {
        Node *p;
        p = (Node*)malloc(sizeof(Node));
        scanf("%d",&x);
        p->data = x;
        r->next = p;
        r = p;
    }
    r->next=NULL;
    return L;
}
int AddNode(LinkList L,int pos,ElemType ele){
    LinkList p;
    Node *s; 
    p=L;
    int j=1;
    while(p&&j<pos){
        p=p->next;
        ++j;
    }
    if(!p||j>pos){
        return 0;
    }
    s = (Node*)malloc(sizeof(Node));
    s->data = ele;
    s->next = p->next ;
    p->next = s;
    return 1;
}
int deleteElem(LinkList L,int pos){
    LinkList p,s;
    p=L;
    int j=1;
    while(p&&j<pos){
        p=p->next;
        ++j;
    }
    if(!p||j>pos){
        return 0;
    }
    s=p->next;
    p->next=s->next;
    free(s);
    return 1;
}
int getElem(LinkList L,int pos){
    Node *p;
    p=L->next;
    int i=1;
    while(p&&i<pos){
        p=p->next;
        ++i;
    }
    if(!p||i>pos){
        return 0;
    }
    return p->data;
}
void printLink(LinkList L){
    Node *p;
    for(p=L->next;p!=NULL;p=p->next){
        printf("%d ",p->data);
    }
    printf("\n");
}
int getSize(LinkList L){
    Node *p;
    int count=0;
    for(p=L->next;p!=NULL;p=p->next){
        count++;
    }
    return count;
}
int main(){
    LinkList L;
    int n;
    printf("输入单链表的长度:");
    scanf("%d",&n);
    L = createLinkR(n);
    printLink(L);
    AddNode(L,2,7);
    printLink(L);
    printf("大小为:%d\n",getSize(L));
    deleteElem(L,2);
    printLink(L);
    printf("第二个数为:%d\n",getElem(L,2));
    printf("大小为:%d\n",getSize(L));
}

相关文章

网友评论

      本文标题:数据结构c语言实现单链表

      本文链接:https://www.haomeiwen.com/subject/dspgjqtx.html