一世轻尘 发表于 2021-1-25 23:16:43

单链表

本帖最后由 一世轻尘 于 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);//退出程序
}
页: [1]
查看完整版本: 单链表