本文目录一览:
- 1、PHP实现:如何在只给定单链表中某个结点的指针的情况下删除该结点
- 2、怎样编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作?
- 3、链表的实现
- 4、编写程序,建立一个带有节点的单向链表,输入字符串,并按从小到大顺序组织到链表中
PHP实现:如何在只给定单链表中某个结点的指针的情况下删除该结点
p是要删除的结点,q是p的前一个结点 q-next = p-next;//删除的结点的后一结点的首地址赋值给删除的结点的前一结点的next p-next-prior = q;//删除的结点的后一结点的prior指向删除的结点的前一结点的首地址
怎样编写一个完整的程序,实现单链表的建立、插入、删除、输出等基本操作?
typedef int Elemtype;
typedef int status;
#define OVERFLOW -2
#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)
{
linklist p;
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)
{
linklist p;
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);
getchar();
if(L-next ==NULL)
printf("该表为空 !\n");
while(p-next!=NULL)
{
q=p;
if(p-next -data ==x)
{
printf("%d ",q-data );
k=1;
}
p=p-next ;
}
if(p-next p-data ==x)
{
printf("%d ",p-data );
k=1;
}
if(k==0)
printf("未找到值为%d的结点\n",x);
printf("\n");
}
//删除节点
status Delete_linklist(linklist L)
{
linklist p,q;
int k=0,x;
printf("请输入删除节点的值x: ");
scanf("%d",x);
getchar();
if(L-next ==NULL)
return ERROR;
p=L;
q=L-next ;
while(q!=NULL)
if(q-data ==x)
{
k=1;
p=q ;
p-next =q-next ;
free(q);
q=p-next ;
}
else
{
p=q ;
q=p-next ;
}
if(k==0)
printf("表中没有值为%d的结点!\n",x);
return OK;
}
//链表逆置
void ListInverse_linkliast(linklist L)
{
linklist k,p,q;
p=L;
while (p-next !=NULL)
{
p=p-next ;
}
k=p;
while (L-next !=p)
{
q=L-next ;
L-next = q-next ;
k-next =q;
}
}
//链表奇偶分解
void Break_linklist (linklist La,linklist Lb)
{
linklist p,q;
p=La-next;
q=Lb;
while(p-next!=NULL)
{
if(p-data %2==0)
{
q-next =p;
q=q-next ;
}
p=p-next ;
}
if(p-data %2==0)
{
q-next =p;
q=q-next ;
}
}
//主菜单
void main()
{
linklist L1,L2;
printf(" (1) 建立带头节点的单链表\n");
printf(" (2) 插入节点\n");
printf(" (3) 计算链表长度并输出单链表\n");
printf(" (4) 查找值为x的直接前驱结点并输出其值\n");
printf(" (5) 删除节点值为x的结点\n");
printf(" (6) 逆置单链表结点\n");
printf(" (7) 单链表奇偶分解\n");
int choice;
printf(" 请输入选择:");
while(scanf("%d",choice))
{
getchar();
printf("\n\n");
switch(choice)
{
case 1:
Create_Linklist(L1);
break;
case 2:
Insert_Linklist(L1);
break;
case 3:
Visit_linklist(L1);
break;
case 4:
Search_linklist(L1);
break;
case 5:
Delete_linklist(L1);
break;
case 6:
ListInverse_linkliast(L1);
break;
case 7:
Create_Linklist(L2);
Break_linklist (L1,L2);
break;
default:
printf(" 输入有误!");
break;
}
}
}
链表的实现
首先实现一个单链表,代码如下:
#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: ");
scanf("%d",x);
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)
{
node *p1,*p2,*p3;
if (head == NULL || head-next == NULL)
return head;
p1 = head, p2 = p1-next;
while (p2)
{
p3 = p2-next;
p2-next = p1;
p1=p2;
p2=p3;
}
head-next = NULL;
head = p1;
return head;
}
以上就是实现对链表中的元素置逆的操作的函数了。
编写程序,建立一个带有节点的单向链表,输入字符串,并按从小到大顺序组织到链表中
int main()
{
Link head; //链表(不带头节点)
int n;
printf("输入链表的长度n: ");
scanf("%d",n);
printf("连续输入%d个数据(以空格隔开): ",n);
head=CreateLink(n);
printf("\n原本链表的节点是: ");
DispLink(head);
LinkSort(head);
printf("\n从大到小排序之后: ");
DispLink(head);
printf("\n");
return 0;
}
链表的具体存储表示为:
① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))
链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。
以上内容参考:百度百科-单链表