|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);//退出程序
- }
复制代码 |
|