點選檢視程式碼
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);//輸出順序表
}