数据结构链表

       与顺序表相同,链表也是一种线性表,它的数据的逻辑组织形式是一维的。而与顺序表不同的是,链表的物理存储结构是用一组任意地址的存储单元存储数据的。也就是说,它不像顺序表那样占据一段连续的内存空间,而是将存储单元分散在内存的任意地址上。说道这可能让我们联想到我们对FALASH、SD卡、盘等存储介质的“块”、“页”读写操作有点像呀。其他我们平时写代码几乎用不到链表的知识,大多数都是应用开发,就算您是从事嵌入式开发的也很少用到的,一般在uboot、kernel中有这样用法,毕竟这些内容一般出厂都是现成的,我们也用不到改。如果您搞算法这对您来说很简单了,在这记录下说不定我们那个项目中就要用到链表的知道,也当给大家一个入门小知识。

代码可以直接运行:

#include "stdio.h"
typedef int ElemType;
typedef struct node{
    ElemType data;   /*数据域*/
    struct node *next;  /*指针域*/
}LNode,*LinkList;
LinkList GreatLinkList(int n){
    LinkList p,r,list=NULL;
    ElemType e;
    int i;
    for(i=1;i<=n;i++){
        scanf("%d",&e);
		p=(LinkList)malloc(sizeof(LNode));
        p->data=e;
        p->next=NULL;
        if(!list)
            list=p;
        else
            r->next=p;
        r=p;
    }
    return list;
}
/*向链表中写数据*/
void insertList(LinkList *list,LinkList q,ElemType e){
    LinkList p;
    p=( LinkList)malloc(sizeof(LNode));
    p->data=e;
    if(!*list){
    *list=p;
    p->next=NULL;
    }
    else{
        p->next=q->next;
        q->next=p;
    }    
}
/*删除q所指的结点*/
void delLink(LinkList *list ,LinkList q){
    LinkList r;
    if(q==list){
        *list=q->next;
        free(q);
    }
    else{
        for(r=*list;r->next!=q;r=r->next);
        if(r->next!=NULL){
            r->next=q->next;
            free(q);
            }
    }
}
/*释放掉该链表*/
void  destroyLinkList(LinkList *list){
    LinkList p,q;
    p=*list;                
    while(p){
    q=p->next;
    free(p);
    p=q;
    }
    *list=NULL;
} 
main()
{
    int e,i;
    LinkList l,q;
    q=l=GreatLinkList(1);   /*创建一个链表结点,q和l指向该结点*/
    scanf("%d",&e);
	while(e)             /*循环地输入数据,同时插入新生成的结点*/
    {
      insertList(&l,q,e) ;
      q=q->next;
      scanf("%d",&e);
    }
    q=l;
    printf("The content of the linklist\n");
    while(q)          /*输出链表中的内容*/
    {
      printf("%d ",q->data);
      q=q->next;
    }
    q=l;
    printf("\nDelete the fifth element\n");
    for(i=0;i<4;i++)    /*将指针q指向链表第5个元素*/
    {
		if (q == NULL) {
			printf("The length of the linklist is smaller than 5 !");
			getche();
			return;
		}
		q=q->next;
    }
    delLink(&l,q);     /*删除q所指的结点*/
    q=l;
    while(q)            /*打印出删除后的结果*/
    {
      printf("%d ",q->data);
      q=q->next;
    }
    destroyLinkList(&l);  /*释放掉该链表*/
    getche();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大犇犇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值