#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
typedef struct _Node{
int data;
struct _Node *next;
}Node;
typedef struct _Node *linklist;
//返回第i个元素的值
int getelem(linklist L,int i)
{
int j=1;
linklist p=L->next;
while(p&&j<i) //从头开始 往后遍历
{
p=p->next;
j++;
}
//判断不合法:
if(!p||j>i)
return 0;
return p->data;
}
void listinsert(linklist *L,int i,int e)
{
int j=1;
linklist s,p;
p=*L;
while(p&&j<i) //遍历找到第i个结点 用p代表
{
p=p->next;
j++;
}
if(!p||j>i)
return ;
s=(linklist)malloc(sizeof(Node)); //创建新节点进行插入操作
s->data=e;
s->next=p->next;
p->next=s;
}
int listdelete(linklist *L,int i) //删除第i个结点 并返回删除掉的数据
{
linklist p,q;
int j=1;
p=*L;
while(p->next&&j<i)
{
p=p->next;
j++;
}
if(!p->next||j>i)
return 0;
q=p->next;
p->next=q->next;
int a=q->data;
free(q);
return a;
}
void creatlist(linklist *L,int n)
{
linklist r,p;
srand(time(0));
*L=(linklist)malloc(sizeof(Node));
r=*L;
for(int i=0;i<n;i++)
{
p=(Node *)malloc(sizeof(Node));
p->data=rand()%100+1;
r->next=p;
r=p;
}
r->next=NULL;
}
void listshow(linklist L)
{
linklist p=L;
while(p->next!=NULL)
{
p=p->next;
printf("%d ",p->data);
}
cout<<endl;
}
void clearlist(linklist *L)
{
linklist p,q;
p=(*L)->next;
while(p)
{
q=p->next;
free(p);
p=q;
}
(*L)->next=NULL;
}
int main()
{
printf("首先随机生成12个数放进链表中:\n");
linklist L;
creatlist(&L,12);
listshow(L);
cout<<endl;
int a=listdelete(&L,5);
printf("删除了第5个元素:%d 删除后链表如下:\n",a);
listshow(L);
printf("在第三个结点插入数字999\n插入后链表如下:\n");
listinsert(&L,3,999);
listshow(L);
clearlist(&L);
}
线性表链式存储
最新推荐文章于 2022-09-10 16:00:24 发布