
代碼:
//Init初始化 初始化鏈表
//Build 創建一批新鏈表
//Insert 輸入位置 輸入要添加的資料
//Delete(Linklist *L,int i) i是洗掉的位置
//Updat(Linklist *L,int i,Type elem) i是位置 elem是要變更的資料
//length 求鏈表長
//Print 列印鏈表
//Search(Linklist *L,int elem) 查找鏈表中與輸入資料相同的位置
#include <stdio.h>
#include <stdlib.h>
typedef int Type;
typedef int Status;
typedef struct node{
Type date; //資料域
struct node *next; //指標域
}Lnode,*Linklist;
Status Init(Linklist *L)
{
Lnode *H= (Linklist)malloc(sizeof(Lnode));
H->next = NULL;
printf("初始化成功");
return 1;
}
Status Build(Linklist *L) //尾插法
{
int n;
printf("想要創建的鏈表長度:\n");
scanf("%d",&n);
Linklist p,temp;
temp = (*L);
while(n>0)
{
p =(Linklist)malloc(sizeof(Lnode));
scanf("%d",&p->date);
p->next = NULL;
temp->next = p;
temp = p;
n--;
}
printf("鏈表創建成功");
return 1;
}
void length(Linklist L)
{
int sum;
while(L->next)
{
sum++;
L = L->next;
}
printf("%d",sum);
}
Status Insert(Linklist *L,int i,Type elem)
{
Linklist p;
p=(*L);
int j=0;
while(p&&i<j)
{
p=p->next;
j++;
}
if(p&&i==j)
{
Lnode *H = (Linklist)malloc(sizeof(Lnode));
H->date = elem;
H ->next= p->next;
p->next = H->next;
return 0 ;
}
}
Status Delete(Linklist *L,int i)
{
Linklist p = (*L);
int j=0;
while(p&&i<j)
{
p=p->next;
j++;
}
if(p&&i==j)
{
Linklist H;
H = p->next;
p->next =H->next;
free(H);
}
return 0;
}
Status Update(Linklist *L,int i,Type elem)
{
int j=1;
while(L&&j<i)
{
(*L) = (*L)->next;
j++;
}
if(L&&j==i)
{
(*L)->date = elem;
}
return 0;
}
Status Search(Linklist L,int i)
{
int j=1;
while(L&&j<i)
{
L = L->next;
j++;
}
if(i==j)
{
printf("%d",L->date);
}
return 0;
}
Status Print(Linklist L)
{
while(L)
{
printf("%d",L->date);
L = L->next;
}
return 0;
}
int main(void)
{
Linklist a;
Init(&a);
Build(&a);
Insert(&a,2,3);
Print(a);
Delete(&a,2);
Update(&a,2,4);
Print(a);
Search(a,3);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/81670.html
標籤:數據結構與算法
