typedef
在大興安嶺等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都網站設計、成都做網站 網站設計制作按需策劃設計,公司網站建設,企業網站建設,成都品牌網站建設,全網營銷推廣,外貿營銷網站建設,大興安嶺網站建設費用合理。
struct
LNode
{
int
date;
struct
LNode
*next;
}
LNode,
*LinkList;
/*線性鏈表類型
*/
typedef
int
Status;
int
CreatLinkList_L(LinkList
L)/*逆位序輸入n個元素的值,建立帶頭節點的單鏈線性表L
*/
{
int
i,n;
printf("輸入n的值");
scanf("%d",n);
LinkList
p,
p2;
L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;/*先建立一個帶頭節點的單鏈表*/
p2
=
L;
for(i=n;i0;--i)
{
p
=
(LinkList)malloc(sizeof(LNode));
scanf("%d",(p-date));
p-next
=
p2-next;
p2-next
=
p;
}
return
OK;
}
Status
ListLength_L(LinkList
L)
{
int
i=0;
LinkList
p
=
L;
p
=
p-next;
while(p!=NULL)
{
printf("%d\n",
p-date);
p
=
p-next;
i++;
}
return
i;
}
void
DeleteLinkList_L(LinkList
L)
{
LinkList
p
=
L-next;
while(p)
{
free(L);
L
=
p;
p
=
L-next;
}
}
void
main()
{
LinkList
L
=
NULL;
CreatLinkList_L(L);
printf("%d\n",
ListLength_L(L));
DeleteLinkList_L(L);//動態分配的內存應主動釋放
}
求單鏈表的長度函數名為linklistlength
單鏈表用結構體linklist表示
int linklistlength(linklist *head)
{
if(!head) return 0;
return linklistlength(linklist *head-next)+1;
}
#includestdio.h
#includestdlib.h
//鏈表定義
typedef int ElemType;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*************************************
* 鏈表函數 *
*************************************/
//鏈表初始化
void InitLink(LinkList L);
//創建函數,尾插法
void CreateLink_T(LinkList L,int n);
//創建函數,頭插法
void CreateLink_H(LinkList L,int n);
//銷毀函數
void DestroyLink(LinkList L);
//判斷是否為空函數
bool EmptyLink(LinkList L);
//獲取函數
bool GetLink(LinkList L,int i,int e);
//插入函數
void InsertLink(LinkList L,int i,int e);
//刪除函數
void DeleteLink(LinkList L,int i,int e);
//遍歷函數
void TraverseLink(LinkList L);
//鏈表長度函數
int LengthLink(LinkList L);
//合并函數
void MergeLink(LinkList L1,LinkList L2);
void main()
{
LinkList L1,L2;
InitLink(L1);
InitLink(L2);
CreateLink_H(L1,2);
CreateLink_T(L2,2);
TraverseLink(L1);
printf("\n");
TraverseLink(L2);
printf("\n");
MergeLink(L1,L2);
TraverseLink(L1);
TraverseLink(L2);
}
//創建函數,尾插法
void InitLink(LinkList L)
{
L=(LinkList)malloc(sizeof(LNode));
if (!L)
{
printf("Init error\n");
return;
}
L-next=NULL;
}
void CreateLink_T(LinkList L,int n)
{
if(n1)
{
printf("n must =1\n");
return ;
}
else
{
// L=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
for(int i=0;in;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));// the lower letter p
printf("enter the data :\t");
scanf("%d",(p-data));
p-next=L-next;
L-next=p;
}
}
}
//創建函數,頭插法
void CreateLink_H(LinkList L,int n)
{
if (n1)
{
printf("n must =1\n ");
return;
}
else
{
//L=(LinkList)malloc(sizeof(LNode));
LinkList pre=(LinkList)malloc(sizeof(LNode));
L-next=NULL;
pre=L;
for(int i=0;in;i++)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
printf("enter the data:\t");
scanf("%d",(p-data));
pre-next=p;
pre=p;
}
pre-next=NULL;
}
}
//銷毀函數
void DestroyLink(LinkList L)
{
LinkList q=L,p=L;
while (p)
{
q=p;
p=p-next;
free(q);
}
L-next=NULL;
}
//判斷是否為空函數
bool EmptyLink(LinkList L)
{
if (NULL==L-next)
{
return true;
}
else
{
return false;
}
}
//獲取函數
bool GetLink(LinkList L,int i,int e)
{
if (i1)
{
return false;
}
else
{
if (EmptyLink(L))
{
return false;
}
LinkList p=L-next;
int j=1;
while(pji)
{
p=p-next;
j++;
}
if (!p||ji)
{
return false;
}
else
{
e=p-data;
return true;
}
}
}
//插入函數
void InsertLink(LinkList L,int i,int e)
{
if (i0||iLengthLink(L))
{
printf("Insert error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(p(ji))
{
p=p-next;
j++;
}
if (!p||ji)
{
printf("Insert error\n");
return;
}
else
{
LinkList q=(LinkList)malloc(sizeof(LNode));
q-data=e;
q-next=p-next;
p-next=q;
}
}
}
//刪除函數
void DeleteLink(LinkList L,int i,int e)
{
if(i=0||iLengthLink(L))
{
printf("delete error\n");
return;
}
else
{
LinkList p=L;
int j=0;
while(pji-1)
{
p=p-next;
j++;
}
if(!p||ji)
{
printf("please enter i again\n");
return;
}
else
{
LinkList q=p-next;
e=p-next-data;
p-next=p-next-next;
free(q);
}
}
}
//遍歷函數
void TraverseLink(LinkList L)
{
LinkList p=L-next;
if(!p)
{
printf("the Link L is empty\n");
}
while(p)
{
printf("%d\n",p-data);
p=p-next;
}
}
//鏈表長度函數
int LengthLink(LinkList L)
{
int i=0;
LinkList p=L-next;
while(p)
{
p=p-next;
i++;
}
return i;
}
//合并函數
void MergeLink(LinkList L1,LinkList L2)
{
int i=0,flag=0;
LinkList p1=L1-next,p2=L2-next;
LinkList p=(LinkList)malloc ((LengthLink(L1)+LengthLink(L2)+2)*sizeof(LNode));
LinkList pre=p;
if (!p)
{
printf("MergeLink error\n");
return;
}
p-next=NULL;
while (p1p2)
{
if (p1-data=p2-data)
{
InsertLink(p,i++,p2-data);
p2=p2-next;
}
else
{
InsertLink(p,i++,p1-data);
p1=p1-next;
}
}
while (p1)
{
InsertLink(p,i++,p1-data);
p1=p1-next;
}
while(p2)
{
InsertLink(p,i++,p2-data);
p2=p2-next;
}
while(pre)
{
pre=pre-next;
}
LinkList q=L1;
L1=p;
DestroyLink(q);
DestroyLink(L2);
}