#include<iostream>
using namespace std;
#define OK 1;
#define ERROR 0;
typedef int ElemType;
typedef int Status;
typedef struct LNode //定义链表结构体
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
Status CreateList_L(LinkList &L,int n) //创建链表并输入数据
{
int i;
LinkList p,q; //p q :过度指针
L=new LNode; //新申请的结点
L->next=NULL; //生成头指针
q=L;
cout<<"please input "<<n<< " numbers";
for(i=1;i<=n;i++)
{
p=new LNode; //申请新的结点
cin>>p->data;
q->next=p; // 链表链接
q=q->next; // 跳指针
}
q->next=NULL; //生成尾指针
return OK;
}
Status Outptlist_L(LinkList L) //输出链表
{
LinkList p;
p=L->next; //指向首结点
if(p==NULL) //当链表尾空 指示返回空链表
{
cout<<"This list is empyt."<<endl;
}
while (p!=NULL)
{
cout<<p->data<<" "; //当链表不为空,输出链表数据
p=p->next; // 跳指针
}
cout <<endl;
return OK;
}
int Listlength_(LinkList L) //求链表长度
{
LinkList p;
int n=0;
p=L->next; //p指向首结点
while (p!=NULL)
{
n++;
p=p->next;
}
return n;
}
Status GetElem_L(LinkList L,int i,ElemType &e) //将链表L中第i个元素用e返回
{
LinkList p;
int j;
if (i<1||i> Listlength_(L)) //判断选择的合理性
return ERROR;
p=L->next;
for (j=1;j<i;j++) //for 循环寻找第i个元素
p=p->next ;
e=p->data; //用e返回
return OK;
}
Status ListInsert_L(LinkList&L,int i,ElemType e) // 在链表第i个位置插入e
{
LinkList p,S;
int j;
if (i<1||i> Listlength_(L)+1) //判断选择的合理性
return ERROR;
if (i==1) p=L; //当在第一个元素插入时p指向头指针
else
p=L->next; //否则指向首结点
for(j=1;j<i-1;j++)
p=p->next;
S=new LNode; //申请新的结点
S->data=e; //将e赋给新的结点
S->next=p->next; //将新结点与前一个结点的next链接
p->next=S; //将前一个结点与新节点链接
return OK;
}
Status ListDelete_L(LinkList&L,int i,ElemType &e) //删除链表L的第i个元素,并用e返回
{
LinkList p,q;
int j;
if (i<1||i> Listlength_(L)) //判断选择的合理性
return ERROR;
p=L->next;
for(j=1;j<i-1;j++) //找到第i个元素
p=p->next;
q =p->next; // q指向p的next
e=q->data; // 取q的数据
p->next=q->next; //将p的next与q的next链接
free(q); //释放指针
return OK;
}
void main ()
{
int n,m,k;
LinkList L1;
cout <<"please input a umber: ";
cin>> m;
CreateList_L(L1,m);
cout<<"输出列表:";
Outptlist_L( L1);
cout<<"The length is "<< Listlength_(L1)<<endl;
GetElem_L( L1,3,n);
cout<<"The number is "<<n<<endl;
ListInsert_L(L1,6, 0);
cout<<"The Insertlist is : ";
Outptlist_L( L1);
ListDelete_L(L1,3,k);
cout<<"The Deletelist is : ";
Outptlist_L( L1);
cout<<"The Delete number is "<<k<<endl;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。