#include "stdafx.h"
#include "stdio.h"
#include <iostream>
using namespace std;
#define MAXSIZE 50
#define swap(a,b) a=a+b;b=a-b;a=a-b;
typedef struct Node{
int data;
struct Node *next;
}LNode;
void Output(Node *p);
void TailOutput(LNode *p);
// 頭插入法建連結串列
LNode* HeadList(LNode *head)
{
int i;
LNode *p,*h;
h = head;
for(i=0;i<5;i++)
{
p = (struct Node*)malloc(sizeof(struct Node));
p->data = i;
p->next = h->next;
h->next = p;//新建立的節點,總是作為第一個節點
}
return head;
}
/*
為了操作方便,總是在連結串列的第一個結點之前附設一個頭結點(頭指標)
head指向第一個結點。頭結點的資料域可以不儲存任何資訊(或連結串列長度等資訊)
*/
//尾插入法建連結串列
LNode* TailList(LNode *Tail)
{
LNode *p,*t;
t = Tail;
int i;
for (i=0;i<10;i++)
{
p = (struct Node*)malloc(sizeof(struct Node));
p->data = i;
t->next = p;
t = t->next;
}
t->next = NULL;
// free(p);
return Tail;
}
/*
向連結串列中插入一個節點(插入在末尾)
*/
LNode* insertNode(LNode *l,int value)
{
LNode *p,*t;
t=l;
while(t->next!=NULL)
{
t=t->next;
}
p=(struct Node*)malloc(sizeof(struct Node));
p->data=value;
p->next=NULL;
t->next=p;
return l;
}
/*
刪除某個節點的值
*/
LNode* DeleteNode(LNode *l,int value)
{
LNode *p,*r;
p=l;
while(p!=NULL)
{
r=p->next;//p指向頭節點,而頭節點在定義時僅僅是一個節點,因此把頭節點的下一個節點(第一個節點)
if (r->data==value)
{
p->next=r->next;
return l;
}
p=p->next;
}
return l;
}
/*
查詢某個節點的值
*/
int SearchNode(LNode *l,int pos)
{
LNode *p;
int i=1;
p=l;
while (p->next!=NULL)
{
p=p->next;
if (i==pos)
{
return p->data;
}
i++;
}
return 0;
}
void Output(Node *p)
{
Node *l;
l = p->next;
while(l!=NULL)
{
printf("%d\n",l->data);
l = l->next;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
LNode *tmp;
Node *head,*p,*l;
int t;
head = (struct Node*)malloc(sizeof(struct Node));
head->next = NULL;
// tmp = HeadList(head);
//Output(tmp);
tmp = TailList(head);
tmp = insertNode(tmp,5);
tmp = DeleteNode(tmp,6);
Output(tmp);
t = SearchNode(tmp,3);
printf("%d\n",t);
getchar();
return 0;
}