自己寫的關於鏈表的小程序。baodian13_1.cpp
//實現單鏈表的建立,測長,打印功能
#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;
typedef struct Node
{
int data;
struct Node* next;
}Node,*LinkList;
//單鏈表的建立
//數據從鍵盤輸入,規定data=0,數據輸入停止
LinkList Creat_linklist()
{
int cycle=1;//用於控制循環
LinkList L=(LinkList)malloc(sizeof(Node));//建立的新鏈表
LinkList temp=L;//指向鏈表的尾接點
if(NULL==L)
{
cout<<"Failed to malloc a new Linklist!";
return NULL;
}
L->next=NULL;//建立空的頭結點
while(cycle)
{
int data;//用於存放鍵盤中輸入的數據
cout<<"Please input the data:"<<endl;
cin>>data;
if(data!=0)
{
LinkList s=(LinkList)malloc(sizeof(Node));
s->data=data;//新建節點賦初值
s->next=NULL;
temp->next=s;//建立鏈接,更新鏈表
temp=temp->next;
}
else
{
cycle=0;
}
}
return L;
}
//單鏈表的測長
int GetLength_Linklist(LinkList L)
{
if(NULL==L)
{
cout<<"There is no node!"<<endl;
}
if (NULL==L->next)
{
cout<<"The linklist is empty!"<<endl;
}
int i=0;
LinkList temp=L->next;
while(NULL!=temp)
{
i++;
temp=temp->next;
}
return i;
}
//單鏈表的打印
void Print_Linklist(LinkList L)
{
if(NULL==L)
{
cout<<"There is no node!"<<endl;
}
if (NULL==L->next)
{
cout<<"The linklist is empty!"<<endl;
}
LinkList temp;
cout<<"鏈表的打印"<<endl;
for (temp=L->next;NULL!=temp->next;temp=temp->next)
{
cout<<setw(3)<<temp->data<<"->";
}
cout<<setw(3)<<temp->data;
cout<<endl;
}
int main()
{
LinkList L=Creat_linklist();
Print_Linklist(L);
int i=GetLength_Linklist(L);
cout<<"鏈表的長度:"<<i<<endl;
return 0;
}
//實現刪除節點值爲num的節點
//num--要刪除的節點值
LinkList Node_Delete(LinkList L,int num)
{
if(NULL==L)
{
cout<<"There is no node!"<<endl;
}
if (NULL==L->next)
{
cout<<"The linklist is empty!"<<endl;
}
LinkList temp=L->next;//用於指向被刪除的節點
LinkList p=L;//用於指向被刪除節點的上一個節點
while (NULL!=temp->next)//檢查前N-1個節點
{
if (num==temp->data)
{
p->next=temp->next;
free(temp);
cout<<"刪除節點成功。"<<endl;
return L;
}
else
{
p=temp;
temp=temp->next;
}
}
//檢查尾節點
if (num==temp->data&&NULL==temp->next)
{
p->next=NULL;
free(temp);
cout<<"刪除節點成功。"<<endl;
return L;
}
else
{
cout<<"沒有此節點,無法刪除!"<<endl;
}
}