數據結構學習(一)——順序表的操做

       前段時間鼓搗Linux,學習了一些基礎性的東西,好比經常使用命令。如今準備開始學習Linux環境下的編程。重視基礎,先學習數據結構。參考教材是《嵌入式系統軟件設計中的數據結構》,這是嵌入式系統軟件設計基礎叢書中的一本,我的認爲不錯哈。結合了ucos中用到的數據結構例子來說。並且有C語言的實現,不是僞代碼。linux

      開始學的是線性表,其中分爲順序表和鏈表。而對於順序表是用數組表示的。設計到的操做主要有刪除和插入。下面的代碼是一個總體對順序表的操做,包括建立表,刪除一個元素和插入一個元素。代碼在linux下調試經過。編程

數序表的操做:數組

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE	 100

typedef struct
{
	int data[MAXSIZE];	//存放數組元素
	int last;		//數組的最後一個元素的下標
}squeuelist;

int main(void)
{
	int choice, mount, i, dat, pos;
	squeuelist *l;

	while(1)
	{
		printf("   線性順序表操做練習\n");
		printf("1.建立一個順序表\n");
		printf("2.插入數據\n");
		printf("3.刪除數據\n");
		printf("4.打印順序表\n");
		printf("5.退出\n");
		printf("請輸入你的選擇(1-5):");
		scanf("%d",&choice);
		switch(choice)
		{
		case 1:
			printf("請輸入你要建立的元素個數:");
			scanf("%d", &mount);
			if(mount>MAXSIZE)
			{
				printf("建立的個數大於規定範圍!");
				break;
			}
			printf("請輸入數據:");
			for(i=0; i<mount; i++)
			{
				scanf("%d",&l->data[i]);
			}
			l->last = mount-1;
			break;
		//插入操做
		case 2:
			printf("請輸入要插入的元素值及所在位置(位置1表示元素0,依次類推):");
			scanf("%d %d", &dat, &pos);
			if(l->last>MAXSIZE-1)
			{
				printf("空間溢出!\n");
				break;
			}
			else if(pos<1 || pos>l->last+2)
			{
				printf("插入的位置非法!\n");
				break;
			}
			else
			{
				for(i=l->last; i>=pos-1;i--)
				{
					l->data[i+1] = l->data[i];
				}
				l->data[pos-1] = dat;
				l->last += 1;
			}
			break;
		//刪除操做
		case 3:
			printf("請輸入你要刪除元素所在的位置(位置1表明元素0,依次類推):");
			scanf("%d",&pos);
			if(pos<1 || pos>l->last+1)
			{
				printf("輸入的位置無效!\n");
				break;
			}
			else
			{
				for(i=pos; i<=l->last; i++)
				{
					l->data[i-1] = l->data[i];
				}
				l->last -= 1;
			}
			break;
		//打印輸出順序表
		case 4:
			printf("順序表爲:");
			for(i=0; i<=l->last; i++)
			{
				printf("%d ", l->data[i]);
			}
			printf("\n");
			printf("順序表的個數爲:%d\n",l->last+1);
			break;
		//退出程序
		case 5:
			exit(0);
			break;
		default:
			break;
		}
	}
	return 1;
}

說說順序表的特色:數據結構

  • 插入或刪除運算不方便,除了表尾位置外,其餘位置都要移動數據。平均時間複雜度爲O(n),效率低。
  • 順序表由於佔用的是順序空間,加上你不知道你會使用多少空間,因此會提早預先分配空間,空間大的會形成浪費,小的話會致使溢出。
  • 固然好處就是查找方便了,只要經過數組元素下標就能夠找到想要的元素了。

由於是新手,對VIM還不是很熟。不過通過對配置文件的改造一番,感受VIM仍是很不錯的,有點喜歡了。學習

相關文章
相關標籤/搜索