数据结构之线性表的链式存储

来源:互联网 发布:淘宝轮播图片大全 编辑:程序博客网 时间:2024/05/20 15:36

单链表的初始化、插入、删除和遍历

#include <stdlib.h>#include <stdio.h>typedef struct LNode{    int data;                //链表数据    struct LNode* next;        //链表指针}LNode,*LinkList;/*头插法-建立单链表*/LinkList HeadCreate(LinkList la){    int num=0;    int num1=0;    la=(LinkList)malloc(sizeof(LNode));        //建立头结点    la->next=NULL;    printf("请输入10个数字进行链表的初始化工作:\n");    //scanf("%d",&num);    while(num<10)    {        LNode *p=(LinkList)malloc(sizeof(LNode));        scanf("%d",&num1);        p->data=num1;        p->next=la->next;        la->next=p;        num++;    }    return la;}/*单链表插入操作*/bool InsertList(LinkList la,int i,int e){    //在la链表中的i位置插入数值e    int j=1;    LinkList p=la,s;    while(p && j<i)    {        p=p->next;        j++;    }    if(p==NULL)        return false;    if((s=(LinkList)malloc(sizeof(LNode)))==NULL)        return false;    s->data=e;    s->next=p->next;    p->next=s;    return true;}/*单链表删除操作*/bool DeleteList(LinkList la,int i){    int j=1;    LinkList p=la,q;    while(p && j<i)        //p指向第i-1个元素    {        p=p->next;        j++;    }    if(p==NULL || p->next==NULL)        //表示不存在第i-1个和第i的元素        return false;    q=p->next;    p->next=q->next;    free(q);    return true;}//表的遍历void TravelList(LinkList la){    LinkList p=la->next;    while(p!=NULL)    {        printf("  %d->",p->data);        p=p->next;    }    printf("\n");}int main(){    int a=0;//需要被插入的元素    int po=0;//插入元素的位置    LNode la;    LinkList p;    p=HeadCreate(&la);                //头插法创建长度为10的单链表    TravelList(p);    printf("请输入要插入的整数元素:\n");    scanf("%d",&a);    printf("请输入元素的位置:\n");    scanf("%d",&po);    InsertList(p,po,a);                //在链表的第2个位置插入元素10    TravelList(p);    printf("请输入要删除的元素的位置:");    scanf("%d",&po);    DeleteList(p,po);    TravelList(p);    return 0;}//运行环境vc6.0等一般C语言的编译器都可以




此处只是实现的单链表对于其他类型的链表基本上都是在此基础上进行的一些升级和改造,大家能理解单链表基本上就差不多了。


原创粉丝点击