Login
网站首页 > 文章中心 > 其它

php实现一个单链表

作者:小编 更新时间:2023-07-31 17:44:16 浏览量:365人看过

PHP实现:如何在只给定单链表中某个结点的指针的情况下删除该结点

p是要删除的结点,q是p的前一个结点 q-next = p-next;//删除的结点的后一结点的首地址赋值给删除的结点的前一结点的next p-next-prior = q;//删除的结点的后一结点的prior指向删除的结点的前一结点的首地址

怎样编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作?

typedef int Elemtype;

typedef int status;

#define OK 1

#define ERROR -1

#include "stdio.h"

#include "stdlib.h"

typedef struct LNode {

Elemtype data;

struct LNode *next;

}*linklist;

//构造链表

void Create_Linklist(linklist L)

{

linklist p;

p=(linklist)malloc(sizeof(LNode));

if(!p)

exit(OVERFLOW);

L=p;

L-next =NULL;

}

//节点插入

void Insert_Linklist(linklist L)

int n,i;

printf("请输入插入节点的个数n: ");

scanf("%d",n);

getchar();

for(i=n;i0;i--)

p=(linklist )malloc(sizeof(LNode));

scanf("%d",p-data);

p-next=L-next ;

L-next =p;

//遍历输出并输出长度

status Visit_linklist(linklist L)

int i=1;

p=L-next ;

if(L-next==NULL)

return ERROR;

while(p-next !=NULL)

printf("%d ",p-data );

p=p-next ;

i++;

printf("%d\n",p-data );

printf("长度为:%d\n",i);

return OK;

//查找值为x的直接前驱结点q并输出

void Search_linklist(linklist L)

int x,k=0;

linklist p=L,q;

printf("输入x: ");

scanf("%d",x);

if(L-next ==NULL)

printf("该表为空 !\n");

while(p-next!=NULL)

q=p;

if(p-next -data ==x)

printf("%d ",q-data );

k=1;

if(p-next p-data ==x)

if(k==0)

printf("未找到值为%d的结点\n",x);

printf("\n");

//删除节点

status Delete_linklist(linklist L)

linklist p,q;

int k=0,x;

printf("请输入删除节点的值x: ");

p=L;

q=L-next ;

while(q!=NULL)

if(q-data ==x)

p=q ;

p-next =q-next ;

free(q);

q=p-next ;

else

printf("表中没有值为%d的结点!\n",x);

//链表逆置

void ListInverse_linkliast(linklist L)

linklist k,p,q;

while (p-next !=NULL)

k=p;

while (L-next !=p)

L-next = q-next ;

k-next =q;

//链表奇偶分解

void Break_linklist (linklist La,linklist Lb)

p=La-next;

q=Lb;

q-next =p;

q=q-next ;

//主菜单

void main()

printf(" (1) 建立带头节点的单链表\n");

int choice;

printf(" 请输入选择:");

while(scanf("%d",choice))

printf("\n\n");

switch(choice)

case 1:

Create_Linklist(L1);

break;

Insert_Linklist(L1);

Visit_linklist(L1);

Search_linklist(L1);

Delete_linklist(L1);

ListInverse_linkliast(L1);

default:

printf(" 输入有误!");

链表的实现

首先实现一个单链表,代码如下:

#include iostream

#include stdio.h

#include string.h

#include conio.h

typedef struct student

int data;

struct student *next;

}node;

node *creat()

node *head,*p,*s;

int x,cycle=1;

head=(node *)malloc(sizeof(node));

p=head;

while(cycle)

printf("\nplease input the data: ");

if(x!=0)

s=(node *)malloc(sizeof(node));

s-data=x;

printf("\n %d",s-data);

p-next=s;

p=s;

else cycle=0;

head=head-next;

p-next=NULL;

printf("\n yyy %d",head-data);

return(head);

然后增加一个函数对表中的元素逆置,实现如下:

node *reverse(node *head)

if (head == NULL || head-next == NULL)

return head;

head-next = NULL;

head = p1;

以上就是土嘎嘎小编为大家整理的php实现一个单链表相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章