數據結構之順序表

#define _CRT_SECURE_NO_WARNINGS 


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


#define maxsize 1024
typedef int datatype;

typedef struct
{
	datatype data[maxsize];
	int last;
} sequenlist;

int insert(sequenlist *p, datatype x, int i);  //插入函數
int delete(sequenlist *p, int i);			 //刪除函數


int main()
{
	sequenlist *p;
	int i, ch, n;
	p = (sequenlist *)malloc(sizeof(sequenlist));
	while (1)
	{
		printf("請選擇:   \n");
		printf("(1)輸入順序表\t");
		printf("(2)插入數據\t");
		printf("(3)刪除數據\t");
		printf("(4)結束\n");
		scanf("%d",&ch);
		switch (ch)
		{
		case 1:
			printf("請輸入順序表中數據個數n =");
			scanf("%d", &n);
			printf("\n");
			
			for (i = 0; i < n; i++)
			{
				printf("請輸入第%d個整形數據的值:", i + 1);
				if (scanf("%d", &p->data[i]) != 1)
				{
					printf("\n輸入數據類型錯誤,按任意鍵退出\n");
					system("pause");
					return;
				}
			}
			p->last = n - 1;
			printf("\n輸入的順序表順序爲:");
			for (i = 0; i <= p->last; i++)
				printf("%d ", p->data[i]);
			printf("\n");
			break;

		case 2:
			printf("\n請輸入插入順序表中的數據:");
			scanf("%d",&n);
			printf("\n請輸入插入順序表中的位置:");
			scanf("%d",&i);
		
			if (insert(p, n, i))
			{
				printf("插入後的數據順序表爲:");
				for (i = 0; i <= p->last; i++)
					printf("%d ", p->data[i]);
				printf("\n\n");
			}
			break;

		case 3:
			printf("請輸入要刪除數據的位置:");
			scanf("%d",&i);
			if (delete(p,i))
			{
				printf("刪除後的數據順序表爲:");
				for (i = 0; i <= p->last; i++)
					printf("%d ", p->data[i]);
				printf("\n\n");
			}
			break;
		case 4:
			return 0;
		

		}


	}

	system("pause");
}


int insert(sequenlist *p, datatype x, int i)  //插入函數
{
	int j;
	if (p->last >= maxsize - 1)
	{
		printf("空間溢出\n");
		return 0;  //插入失敗
	}
	else if (i < 1 || i > p->last + 2)
	{
		printf("插入位置非法\n");
		return 0;	//插入失敗
	}
	else
	{
		for (j = p->last; j > i; j--)
			p->data[j + 1] = p->data[j];
		p->data[i - 1] = x;
		//printf("%d  %d\n",i,j);
		p->last = p->last + 1;   //長度加1
	}
	return 1;  //插入成功
}

int delete(sequenlist *p, int i)			 //刪除函數
{
	int j;
	if (p->last + 1 < i || i < 0)
	{
		printf("刪除位置非法\n");
		return 0;	//刪除失敗
	}
	else
	{
		for (j = i; j <= p->last; j++)
			p->data[j - 1] = p->data[j];
		p->last--;
	}
	return 1;		//刪除成功
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章