1. 程式人生 > >資料結構——順序表

資料結構——順序表

順序儲存的線性表(順序表) a.初始化 b.插入節點 c.遍歷  

優點:訪問隨機 缺點:需要大片連續記憶體,插入刪除需要挪動元素,效率低

程式碼實現:

        typedef struct ARRAY //用於管理順序表的資料型別
		{
			int * parr;//順表的起始地址
			int len;//表示能夠儲存的資料節點的個數
			int cnt;//已經使用了的表項個數	
		}ARR,*PARR;

	void init_seq_list(PARR p,int length)//初始化一個順序表
		{
			p->parr = malloc(sizeof(int)*length);
			if(p->parr == NULL)
			{
				printf("malloc failed!\n");
				exit(-1);
			}
			p->len = length;
			p->cnt = 0;
		}
	bool is_full(PARR p)  //判斷表滿
		{
			if(p->cnt == p->len)
				return true;
			else
				return false;
		}
	bool insert_seq_list(PARR p,int pos,int data)//順序表的插入
		{
			int i;
			if(is_full(p))
				return false;
			if((pos <1) || (pos > (p->cnt + 1)) )
				return false;
			for(i = p->cnt -1;i>=pos-1;i--)
			   { p->parr[i+1]=p->parr[i]; }
			p->parr[pos-1] = data;
			p->cnt++;
			return true;	
		}
	bool is_empty(PARR p)//判斷表空
		{
			if(p->cnt == 0)
				return true;
			else
				return false;
		}

	void show_seq_list(PARR p)//順序表的遍歷
		{
			int i;
			if(is_empty(p))
			{
				printf("沒得show\n");
				return;
			}
			for(i=0;i< p->cnt;i++)
				printf("%d\t",p->parr[i]);
			printf("\n");
		}
	bool del_seq_list(PARR p,int pos,int *pdata)//順序表的刪除
		{
			int i;
			if(is_empty(p))
			{
				printf("沒得刪\n");
				return false;
			}
			if(pos < 1 || pos > p->cnt)
				return false;	
			*pdata = p->parr[pos-1];	
			for(i=pos;i<p->cnt;i++)
				p->parr[i-1]=p->parr[i];
			p->cnt--;
			return true;
		}