(线性)单链表的C语言实现--保持有序

来源:互联网 发布:js div class 编辑:程序博客网 时间:2024/06/15 04:10

线性表,单链表的C语言实现,基本操作:初始化,插入,获取,删除,输出链表,插入时并保持有序。

#include <stdio.h>#include <stdlib.h>#include<malloc.h>#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef struct LNode{    int data;    struct LNode *next;}LNode,*LinkedList;//初始化链表 int InitList(LinkedList *L){    *L=(LinkedList)malloc(sizeof(LNode));    if(L == NULL){    printf("申请内存空间失败\n");    exit(0);    }    (*L)->next = NULL;     return OK;}//插入 int Insert(LinkedList *L, int num){    LNode *p,*q,*s;    q=*L;    p=q->next;    while(p!=NULL && num>p->data){        q=p;        p=p->next;    }    s=(LNode *)malloc(sizeof(LNode));    s->data=num;    s->next=p;    q->next=s;    return OK;}//获取元素 int GetElem(LinkedList L,int i,int *e){int j=1;LNode *p;p = L->next;while (p && j < i) {p = p->next; ++j;}if ( !p || j>i )return ERROR;  *e = p->data;return OK;}//删除元素int deleteList(LinkedList *L,int i,int *e){LNode *q,*p;int j=1;q=*L;p=(*L)->next;while(p!=NULL&&j<i){q=p;p=p->next;j++;}if(!p||j>i) return ERROR;*e = p->data;q->next=p->next;free(p);return OK;} //输出链表 int ListOutput(LinkedList *L){    LNode *p;    p=(*L)->next;    while(p!=NULL){        printf("%d ",p->data);        p=p->next;    }    printf("\n");    return OK;}//求链表长度int ListLength(LinkedList *L){LNode *p;int i=0;p=(*L)->next;while(p!=NULL){i++;p=p->next;}return i;} int main(){    LinkedList L;    InitList(&L);    int x;    printf("请输入链表数据:\n");while(scanf("%d",&x)!=EOF){Insert(&L,x);}printf("输出链表:\n");    ListOutput(&L);     printf("\n");    printf("请输入要插入的数据:");    scanf("%d",&x);Insert(&L,x) ;printf("输出链表:\n");    ListOutput(&L);     printf("\n");    printf("请输入要提取的数据位置:\n");    int i;    int e;    scanf("%d",&i);    if(GetElem(L,i,&e))   printf("所要数据为:%d\n",e);else printf("输入错误!\n");printf("请输入要删除的数据位置:\n");    scanf("%d",&i);    deleteList(&L,i,&e);ListOutput(&L);printf("链表长度:%d\n",ListLength(&L));    return 0;}



阅读全文
1 0
原创粉丝点击