#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
int data;
struct list *next;
}List,*LinkList;//定义结构体指针,便于直接用指针来修改位置
//避免 struct List * ptr;
void TailCreat(LinkList &L,int n)
{
//尾插法建立链表
LinkList ptr,p;
int da;
L = (LinkList)malloc(sizeof(List));//动态开辟内存 p = (elemtype *)malloc(sizeof(elemtype));
L->next=NULL;
ptr=L;
while(n--)
{
p = (LinkList)malloc(sizeof(List));
scanf("%d",&da);
p->data=da;//赋值
ptr->next=p;//往后指
ptr=p;
}
ptr->next=NULL;
}
void Display(LinkList L)
{
//遍历链表
LinkList pt;
pt=L->next;
while(pt)
{
printf("%d ",pt->data);
pt=pt->next;
}
putchar('\n');
}
void Delete(LinkList &L,int i,int &e)
{
//删除链表某一位置上的元素
int j=0;
LinkList ptr,p;
ptr=L;
while(ptr&&j<i-1)
{
ptr=ptr->next;
j++;
}
if(!ptr->next||j>i-1)
{
printf("the location is wrong!\n");
exit(0);
}
//找到i的直接前驱
else{
p=ptr->next;
ptr->next=p->next;
e=p->data;
free(p);
}
}
void Insert(LinkList &L,int i,int e)
{
//在第i个位置前插入某一个数
LinkList ptr,p,q;
ptr = L;
int j=0;
while(ptr&&j<i-1)
{
ptr = ptr->next;
j++;
}
if(!ptr->next||j>i-1)
{
printf("the location is wrong!\n");
exit(0);
}
else
{
q=ptr->next;
p = (LinkList)malloc(sizeof(List));
p->data=e;
ptr->next=p;
p->next=q;
}
}
void Find(LinkList L,int i)
{
//查找第i个数的元素
LinkList ptr;
ptr = L;
int j=0;
while(ptr&&j<i-1)
{
ptr = ptr->next;
j++;
}
if(!ptr->next||j>i-1)
{
printf("the location is wrong!\n");
exit(0);
}
else
{
printf("%d\n",ptr->next->data);
}
}
int main()
{
LinkList L;
TailCreat(L,3);
Display(L);
int e;
Delete(L,2,e);
printf("%d\n",e);
Display(L);
Insert(L,2,5);
Display(L);
Find(L,2);
return 0;
}
线性表—链式
最新推荐文章于 2021-10-23 22:23:42 发布