📄 链表.txt
字号:
#include "malloc.h"
#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
#include "stdio.h"
#define OK 1
#define ERROR 0
#define NULL 0
typedef int ElemType;
typedef int Status;
typedef struct LNode
{ ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitList_L(LinkList &L)
{ L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
return OK;
}
Status ClearList_L(LinkList &L)
{ struct LNode *p,*q;
p=L;
while(p->next!=NULL)
{q=p->next;
p->next=q->next;
free(q);}
return OK;
}
Status ListLength_L(LinkList L)
{ struct LNode *p;
int k=0;
p=L;
while(p->next!=NULL)
{++k;
p=p->next;
}return k;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{ if (i<1||i>ListLength_L(L)+1)
{printf("Initial failure!\n"); getch();
}
struct LNode *p,*s;
int j;
p=L;j=0;
while(p&&j<i-1)
{p=p->next;j++;}
if(!p||j>i-1)return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;
p->next=s;
return OK;
}
Status ListTraverse_L(LinkList L)
{ struct LNode *p;
p=L;
if(p->next==NULL)printf("List is empty\n");
else{ p=p->next;
while(p!=NULL)
{printf("%-5d",p->data);p=p->next;}
printf("\n");}
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{if(i<1||i>ListLength_L(L)+1)return ERROR;
struct LNode *p,*q;
int j;
p=L;j=0;
while(p->next&&j<i-i)
{p=p->next;++j;}
if(!(p->next)||j>i-1)return ERROR;
q=p->next;p->next=p->next;
e=q->data;free(q);
return OK;}
Status GetElem_L(LinkList L,int i,ElemType &e)
{if(i<1||i>ListLength_L(L)+1)return ERROR;
struct LNode *p,*q;
int j;
p = L;j = 0;
while(p->next&&j<i-1)
{ p = p->next;++j;}
if(!(p->next)||j>i-1)return ERROR;
q=p->next;
e=q->data;
printf("e=%d\n",e);return(e);
return OK;
}
Status GreateList_L(LinkList &L,int n)
{int i;
struct LNode *p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next; L->next=p;
}
return OK;}
Status GreateList_L1(LinkList &L,int n)
{
int i;
struct LNode *p,*last;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(i>0;i<n;i++){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
L=last; p->next=last->next; last->next=p;p=last;
}
return OK;}
Status LocateElem_L(LinkList L,ElemType e)
{int i;
struct LNode *p;
p=L->next;i=1;
while(p!=NULL&&p->data!=e)
{ p=p->next;i++;}
if(!p){printf("Not found!\n");
return 0;}
else{printf("i=%d\n",i);return(i);}
return OK;}
Status ListEmpty_L(LinkList L)
{
if (L->next=NULL)
printf("表为空\n");
else printf("表不为空\n");
return OK;}
int scan()
{
int d;
printf("请选择所要进行的操作\n");
printf("1. 初始化 2. 插入元素\n");
printf(" 3.遍历单链表 4.求单链表的长度\n");
printf(" 5.删除元素 6.插找元素\n");
printf(" 7. 头插入法建立单链表 8.尾插入法建立单链表\n");
printf(" 9. 按值查找元素 10.检查表是否为空\n");
printf("0.退出\n");
scanf("%d",&d);
return(d);
}
main()
{ int i,n;
int quit=0;
ElemType e;
LinkList L;
cout <<("第一次操作需选择初始化或者头插入法\n")<<endl;
while(!quit)
switch(scan())
{case 1:InitList_L(L);break;
case 2: cout<<("请输入要插入的位置\n");cin>>i;
cout<<("请输入要插入的元素\n");cin>>e;
ListInsert_L(L,i,e);break;
case 3:ListTraverse_L(L);break;
case 4:printf("%d\n",ListLength_L(L));break;
case 5:cout<<("请输入要删除的位置\n");cin>>i;
ListDelete_L(L,i,e);break;
case 6:cout<<("请输入要查找的位置\n");cin>>i;
GetElem_L(L,i,e);break;
case 7:cout<<("输入要插入的元素\n");cin>>n;
GreateList_L(L,n);break;
case 8:cout<<("输入要插入的元素\n");cin>>n;
GreateList_L1(L,n);break;
case 9:cout<<("输入要查找的元素\n");cin>>e;
LocateElem_L(L,e);break;
case 10:ListEmpty_L(L);break;
case 0:quit=1;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -