讀入n值及n個整數,建立單鏈表並遍歷輸出。
輸入格式:
讀入n及n個整數。
輸出格式:
輸出n個整數,以空格分隔(最后一個數的后面沒有空格)。
輸入樣例:
在這里給出一組輸入。例如:
2
10 5
輸出樣例:
在這里給出相應的輸出。例如:
10 5
代碼如下:
/*
填空:單鏈表的建立與遍歷程序。
*/
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct LNode{
ElemType data; //數據域
struct LNode *next; //指針域
} LNode, *LinkList;
Status InitList( LinkList&L); //函數聲明
void CreateList( LinkList &L,int n); //函數聲明
void DisplayList( LinkList ); //函數聲明
void DestroyList( LinkList ); //函數聲明
int main()
{
LinkList L; //值傳遞
InitList( L ); //調用函數InitList
int n;
cin >> n;
CreateList( L, n );
DisplayList( L );
DestroyList( L );
return 0;
}
Status InitList(LinkList&L)
{
L = new LNode ;
L->next = NULL ;
return OK;
}
void CreateList( LinkList &L,int n )
//尾插法建立帶頭結點的有n個元素的鏈表
{
LNode *p, *r; //定義p與r指針
r = L ; //尾指針r指向頭結點
for( int i=0; i<n; ++i ){
p = new LNode ; //生成新結點*p
cin >> p->data; //輸入元素值
p->next= NULL;
r->next = p ; //將p插入到表尾
r = p; //r指向新的尾結點
}
}
void DisplayList( LinkList L )
//遍歷帶頭結點的單鏈表
{
LNode *p =L->next ;
while ( p )
{ if(p->next==NULL)
{
cout<<p->data;}
else cout <<p->data<<" ";
p=p->next;
}
}
void DestroyList( LinkList L )
{//回收L的所有結點的空間
LNode *p = L, *q;
while ( p ) //當p指向結點不為空
{
q = p->next; //q指向p的下一結點
delete p; //回收p指向的結點空間
p = q; //p指向q指向的結點
}}
這是單鏈表最基本的運用,也是熟悉使用單鏈表的重要的一步