鱼C论坛

 找回密码
 立即注册
查看: 2520|回复: 0

[见证历程] 单链表

[复制链接]
发表于 2021-1-25 23:16:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一世轻尘 于 2021-3-30 19:19 编辑
#include<iostream>
#include<cstdlib>
#define LEN sizeof(struct linklist)

using namespace std;

typedef int ElemType;
typedef struct linklist{
        ElemType data;
        struct linklist *next;
}Node,*LinkList;

int length,num,i;
void InitList(LinkList *L);//初始化链表
void DestroyList(LinkList *L);//销毁链表
void ClearList(LinkList *L);//清空链表
void GetElem(LinkList L,int i,ElemType *e);//获取元素
void ListInsert(LinkList *L,int i,ElemType e);//插入元素结点
void ListDelete(LinkList *L,int i,ElemType *e);//删除元素结点
void ShowList(LinkList L);//输出链表
int ListLength(LinkList L);//求表长
void Error(char *s);//报错信息
Node *LocateElem(LinkList L,ElemType e);//定位元素位置


int main()
{

}

//初始化链表
void InitList(LinkList *L)
{
        *L=(Node*)malloc(LEN);
        (*L)->next=NULL;
}

//销毁链表
void DestroyList(LinkList *L)
{
        Node *p;//定义一个结点指针,指向待销毁的结点
        while(*L)
        {
                p=*L;
                *L=(*L)->next;
                free(p);
        }
}

//清空链表
void ClearList(LinkList *L)
{
        Node *p=(*L)->next,*q;//从第一个结点开始释放,保留头结点
        while(p)
        {
                q=p;
                p=p->next;
                free(q);
        }
        (*L)->next=NULL;
}

//求表长
int ListLength(LinkList L)
{
        int length=0;//计数器
        Node *p = L;
        while(p->next)
        {
                length++;
                p=p->next;
        }
        return length;
}

//获取元素
void GetElem(LinkList L,int i,ElemType *e)
{
        Node *p=L->next;
        int j=1;
        while(p&&(j<i))
        {
                p=p->next;
                j++;
        }
        if(!p||(j>i))
                Error("Position Error!");
        else
                *e = p->data;
}

//定位元素位置
Node *LocateElem(LinkList L,ElemType e)
{
        Node *p=L->next;//设置指针,初始时指向链表第一个结点
        while(p&&(p->data!=e))//顺链向后扫描
                p=p->next;
        return p;//返回要查找的元素指针
}

//插入元素
void ListInsert(LinkList *L,int i,ElemType e)
{
        Node *p = *L;
        int j = 0;
        while(p && (j < i-1) )
        {
                p = p->next;
                j++;
        }//运行完后p指向第i-1个结点
        if(!p||(j>i-1))
                Error("Position Error!");
        else//插入第i个结点
        {
                Node *s=(Node*)malloc(LEN);
                s->data=e;//赋值
                s->next=p->next;
                p->next=s;
        }
}

//删除元素并返回其数据域的值
void ListDelete(LinkList *L,int i,ElemType *e)
{
        Node *p = *L,*q;
        int j=0;
        while((p->next)&&(j<i-1))
        {
                p=p->next;
                j++;
        }//运行完后指向第i-1个结点
        if(!(p->next)||(j>i-1))
                Error("Position Error!");
        q=p->next;
        *e=q->data;
        p->next=q->next;
        free(q);
}

//输出链表
void ShowList(LinkList L)
{
        Node *p=L->next;
        while(p)
        {
                cout << p->data;
                p = p->next;
        }
}

//报错信息
void Error(char *s)
{
    cout << s << endl;//输出错误信息提示
    exit(1);//退出程序
}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表