順序表

AbsoluteThree發表於2024-10-15
點選檢視程式碼
SetConsoleOutputCP(CP_UTF8);
#include <stdio.h>
#include <stdlib.h>

typedef int DataType;
struct List
{
	int max;
	int n;
	DataType* elem;
};
typedef struct List* SeqList;

SeqList SetNullList_seq(int m)
{
	SeqList slist = (SeqList)malloc(sizeof(struct List));
	if (slist != NULL)
	{
		slist->elem = (DataType*)malloc(sizeof(DataType) *m);
		if (slist->elem){
			slist->max=m;
			slist->n = 0;
			return slist;
		}
		else
			free(slist);
	}
	printf("out of space!\n");
	return NULL;
}

int IsNullList(SeqList slist)
{
	return(slist->n == 0);
}

int InsertPre_seq(SeqList slist, int p, DataType x)
{
	int q;
	if (slist->n >= slist->max) {/*順序表滿溢位*/
		printf("overflow");
		return(0);
	}
	if(p<0 || p>slist->n){//不存在下標為p的元素
		printf("not exist!\n");
		return(0);
	}
	for (q = slist->n - 1; q >= p; q--)//插入位置以及之後的元素後移
		slist->elem[q + 1] = slist->elem[q];
	slist->elem[p] = x;//插入元素x
	slist->n = slist->n + 1;//順序表長度加1
	return(1);
}

int DelIndex_seq(SeqList slist, int p)//刪除下標為p的元素
{
	int q;
	if(p<0 || p>=slist->n){//不存在下標為p的元素
		printf("Not exist\n");
		return 0;
	}
	for (q = p; q<slist->n; q++) {//p位置之後的元素向前移動
		slist->elem[q] = slist->elem[q + 1];
	}
	slist->n = slist->n - 1;//順序表長度減1
	return 1;
}

void print(SeqList slist) //輸出順序表
{
	int i;
	for (i = 0; i < slist->n; i++) //依次遍歷順序表,並輸出
		printf("%d", slist->elem[i]);
	printf("\n");
}

int main()
{	
	SeqList seqlist;
	int i, x;
	seqlist = SetNullList_seq(12);
	printf("%d", IsNullList(seqlist));
	printf("輸入順序表的元素:");
	for (i = 0; i < 6; i++)
	{
		scanf_s("%d", &x);
		InsertPre_seq(seqlist, i, x);//透過插入建立順序表
	}
	printf("順序表是否為空,1為空,0為非空:%d\n", IsNullList(seqlist));
	printf("當前順序表的元素是:");
	print(seqlist);//輸出順序表
	DelIndex_seq(seqlist, 3);//刪除下標為3的元素
	printf("刪除下標為3的元素後的順序表:");
	print(seqlist);//輸出順序表
	InsertPre_seq(seqlist, 2, 99);//在下標2位置之前插入99
	printf("在下標2位置之前插入99後的順序表:");
	print(seqlist);//輸出順序表
}

相關文章