第二章 线性表——链表

链表的特点:
由一组存储单元地址任意的数据元素按照一定的线性逻辑关系排列组成(呆呆自己的理解),用一组任意的存储单元(存储单元可以连续 也可以不连续)存储线性表的数据元素(教材定义)。每个数据元素包含两部分组成:数据域和链域(指针域)。
常见的链表:线性链表、静态链表、循环链表和双向链表
线性链表——有类似于铰链,一个接一个,有首尾,一个结点含有一个元素数据(data)和下一个数据元素的指针
静态链表——用结构体数组模拟链表
循环链表——表中最后一个结点的指针指向头结点
双向链表——一个结点含有一个元素数据和两个指针(一个指向当前结点的前驱,另一个指向当前结点的后继)
常用的链表操作:插入和删除(这里不一一列出链表的操作函数)
以下代码是小呆呆自己手写的一部分,仅供参考

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2

typedef int Status;
typedef int ElemType;

typedef struct LNode//define a linked list element node
{
    ElemType data;
    struct LNode *next;
}LNode,*LinkList;

void deletelist(LinkList L,int a,int b)
{
    int i;
    LinkList p,q;
    p=L;
    if(b>a||b<1)exit(ERROR);
    for(i=1;i<=b-1;i++)
        p=p->next;
    q=p->next;
    p->next=p->next->next;//删除第b个元素
    free(q);
}

void insertlist(LinkList L,int a,ElemType b)
{
    int i;
    LinkList p,q;
    for(i=1,p=L;i<=a-1;i++)p=p->next;
    q=(LinkList)malloc(sizeof(LNode));
    q->next=p->next;
    q->data=b;
    p->next=q;
}

void Createlist(LinkList L,int a)
{
    LinkList p,q;
    q=L;
    int i;
    for(i=0;i<a;i++)
    {
        p=(LinkList)malloc(sizeof(LNode));
        scanf("%i",&p->data);
        q->next=p;
        p->next = NULL;
        q = p;
    }

}

int main()//单链表的实现
{
    int a,b;
    ElemType c;
    LNode l;
    LinkList L,p;
    void deletelist(LinkList L,int a,int b);
    void insertlist(LinkList L,int b,ElemType c);
    void Createlist(LinkList L,int a);
    L=&l;
    L->data=1;
    L->next=NULL;
    printf("%i\n",L->data);
    printf("\nplease input the length of the linked list \n");
    scanf("%i",&a);
    Createlist(L,a);
    for(p=L;p!=NULL;p=p->next)printf("%i\t",p->data);
    printf("\nplease input the location of the element to be deleted\n");
    scanf("%i",&b);
    deletelist(L,a,b);//删除第b个元素,a为链表数据元素个数
    for(p=L;p!=NULL;p=p->next)printf("%i\t",p->data);printf("\n");
    printf("please input the location of the element to be inserted and its value\n");
    scanf("%i%i",&b,&c);//注意格式控制语句,此处为易错点
    insertlist(L,b,c);
    for(p=L;p!=NULL;p=p->next)printf("%i\t",p->data);printf("\n");
//  system("pause");
    return 0;
}

还请各位大佬提出宝贵的意见

2019年2月28日午后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值