#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; //刪除成功
}
數據結構之順序表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.