本文目錄一覽:
- 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))
鏈式存儲是最常用的存儲方式之一,它不僅可用來表示線性表,而且可用來表示各種非線性的數據結構。
以上內容參考:百度百科-單鏈表
原創文章,作者:ZCLW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/147862.html