1. 程式人生 > 其它 >04. 向量瓦片地圖線化簡演算法研究

04. 向量瓦片地圖線化簡演算法研究

#include <stdio.h>
#define ElemType int
//typedef int ElemType
int main(int argc, char **argv) {
	printf("Hello, World!\n");
	//單鏈表的定義
	typedef struct LNode{
	    ElemType data;
	    struct LNode *next
	}LNode,*LinkList;
	
	//不帶頭結點的單鏈表
	//初始化一個空的單鏈表
	bool InitList(LinkList &L)
	{
	    L=NULL;     //空表,暫時還沒有任何結點
	    return true;
	}
	void test()
	{
	    LinkList L; //宣告一個指向單鏈表的指標
	    InitList(L);//初始化一個空表
	    //後續程式碼······
	}
	//判斷單鏈表是否為空
	bool Empty(LinkList L)
	{
	    return (L==NULL);
	}
	
	//帶頭結點的單鏈表
	//初始化一個空的單鏈表
	bool InitList(LinkList &L)
	{
	    L=(LNode*)malloc(sizeof(LNode));//分配一個頭結點
	    if(L==NULL)return false;    //記憶體不足,分配失敗
	    L->next=NULL;   //頭結點之後是空的
	    return true;
	}
	void test()
	{
	    LinkList L; //宣告一個指向單鏈表的指標
	    InitList(L);//初始化一個空表
	    //後續程式碼······
	}
	//判斷單鏈表是否為空
	bool Empty(LinkList L)
	{
	    if(L->next==NULL)return true;
	    else return false;
	}
	//大部分時候使用有頭結點的連結串列 
	
	//按位查詢,返回第i個元素(帶頭結點)
	LNode * GetElem(LinkList L,int i)
	{
	    if(i<0)return NULL;
	    LNode *p; //指標p指向當前掃描到的結點
	    int j=0;    //當前p指向的是第幾個結點
	    p=L;        //L指向頭結點,頭結點是第0個結點(不存資料)
	    while(p!=NULL&&j<i) //迴圈找到第i個結點
	    {
	        p=p->next;
	        j++;
	    }
	    return p;
	}
	//按值查詢,找到資料域==e的結點
	LNode * LocationElem(LinkList L,int e)
	{
	    LNode *p=L->next;
	    //從第一個結點開始查詢資料域為e的結點
	    while(p!=NULL&&p->data!=e)
	        p=p->next;
        return p;   //找到後返回該結點指標,否則返回NULL
	}
	//求表的長度
	int Length(LinkList L)
	{
	    int len=0;
	    LNode *p=L;
	    while(p->next!=NULL)
	    {
	        len++;
	        p=p->next;
	    }
	    return len;
	}
	//前插操作:在P結點之前插入元素e
	bool InsertPriorNode(LNode *p,ElemType e)
	{
	    if(p==NULL)return false;
	    LNode *s=(LNode *)malloc(sizeof(LNode));
	    if(s=NULL) return false;   //記憶體分配失敗
	    
	    s->next=p->next;    
	    p->next=s;          //新結點連線在p之後
	    s->data=p->data;    //s結點變成p結點
	    p->date=e;     //p資料域覆蓋為e,變成插入的結點
	    return true;
	}
	
}