#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*LinkList;
LinkList create()//创建链表
{
LinkList p,q,h;
ElemType x;
h=(Node *)malloc(sizeof(Node));
p=h;
printf("enter x:\n");
scanf("%d",&x);
while(x!=0)
{ q=(Node *)malloc(sizeof(Node));
q->data=x;
p->next=q;
p=q;
scanf("%d",&x);
}
p->next=NULL;
return h;
}
void list_display(LinkList h)//遍历
{
LinkList p;
p=h->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
cout<<endl;
}
int LinkListDelete(LinkList h,int i,int *e)//删除
{
LinkList p,q;
p=h;
q=h->next;
int j=1;
while(q!=NULL&&j<i)
{
j++;
p=q;
q=q->next;
}
if(i==j&&q!=NULL)
{
p->next=q->next;
*e=q->data;
free(q);
return 1;
}
else
return 0;
}
int LinkListInsert(LinkList h,int i,ElemType e)//插入
{
LinkList p,q;
p=h;
int j=0;
while(j<(i-1)&&p->next!=NULL)
{
j++;
p=p->next;
}
if(j==i-1&&p->next!=NULL)
{
q=(Node *)malloc(sizeof(Node));
if(q==NULL)
return 0;
q->data=e;
q->next=p->next;
p->next=q;
return 1;
}
else
return 0;
}
LinkList linklistni(LinkList h)//逆置
{
LinkList p,q;
if (h==NULL)
{
printf("链表空!\n");
return h;
}
p=h->next; q=p->next;
p->next=NULL;
while(q!=NULL)
{ p=q;
q=p->next;
p->next=h->next;
h->next=p;
}
return h;
}
LinkList deleteeven(LinkList h)//删除偶数
{
LinkList p,q;
p=h->next;
q=h->next;
int i=1,t,s;
while(q!=NULL)
{
if(q->data%2==0)
{
p->next=q->next;
free(q);
}
else
p=q;
q=p->next;
}
return h;
}
void init()
{
printf("*********菜单*********\n");
printf("1.创建一个新链表\n");
printf("2.遍历链表\n");
printf("3.删除链表中的元素\n");
printf("4.插入链表中一个元素\n");
printf("5.对链表中的元素逆置\n");
printf("6.删除链表中的偶数\n");
}
int main()
{
init();
LinkList list;int n,t,i;
while(~scanf("%d",&n))
{
switch(n)
{
case 1:list=create();break;
case 2:list_display(list);break;
case 3:printf("输入要删除第几个\n");
scanf("%d",&i);
if(LinkListDelete(list,i,&t))
printf("删除成功\n");
else
printf("删除失败\n");
break;
case 4:printf("输入插入的元素的位置:");
scanf("%d",&i);
printf("输入插入的元素:");
scanf("%d",&t);
if(LinkListInsert(list,i,t))
{
printf("插入成功,插入后结果为:\n");
list_display(list);
}
else
printf("插入失败\n"); break;
case 5:list=linklistni(list);
printf("逆置结果为:\n");
list_display(list);break;
case 6:
list=deleteeven(list);
printf("删除结果为:\n");
list_display(list);
break;
}
}
return 0;
}
数据结构——单向链表的链式存储及实现
最新推荐文章于 2021-05-18 22:54:28 发布