|
第一个是线性表顺序链接。编译成功,运行有个小错误。就是删除结点结束后。最后一个结点和前驱结点相同。我找来找去找不出原因。郁闷中。
[code:1]
#include <stdio.h>
#define maxsize 10
typedef struct sqlist
{
int data[maxsize];
int last;
} sqlistTp;
int main()
{
sqlistTp L;
int input;
int count = 1;
Initsqlist (&L);
printf("请输入一些数字:");
scanf("%d", &input);
while (input != 0)
{
insert_sqlist (&L, input, count);
count++;
scanf("%d", &input);
}
print_sqlist(&L);
length_sqlist(&L);
printf("请输入要插入的数据:");
scanf("%d", &input);
printf("请输入要插入的位置:");
scanf("%d", &count);
insert_sqlist (&L, input, count);
print_sqlist(&L);
length_sqlist(&L);
printf("请输入要读出数字的位置:");
scanf("%d", &count);
get_sqlist(&L, count);
printf("请输入要查找(按值查找)的数字:");
scanf("%d", &input);
locate_sqlist(&L, input);
printf("请输入要删除的位置:");
scanf("%d", &count);
delete_sqlist (&L, count);
print_sqlist(&L);
length_sqlist(&L);
}
int Initsqlist (sqlistTp *L)
{
L -> last = 0;
return (1);
}
int insert_sqlist (sqlistTp *L, int x, int i)
{
int j;
if (L -> last == maxsize)
{
printf("\n表满!\n");
return 0;
}
if ((i < 1) || (i > L -> last + 1))
{
printf("\n非法位置!\n");
return 0;
}
for (j = L -> last; j >= i; j--)
L -> data[j] = L -> data[j - 1];
L -> data[i - 1] = x;
L -> last = L -> last + 1;
}
int print_sqlist (sqlistTp *L)
{
int i;
printf("当前线性表排列为:\n");
for (i = 0; i < L -> last; i++)
printf("%d ", L -> data[i]);
printf("\n");
}
int length_sqlist (sqlistTp *L)
{
printf("表长为:%d\n", L -> last);
}
int get_sqlist (sqlistTp *L, int i)
{
if ((i < 0) || (i > L -> last))
{
printf("\n非法位置!\n");
return 0;
}
printf("\n第%d个位置的数字是%d\n", i, L -> data[i - 1]);
}
int locate_sqlist (sqlistTp *L, int x)
{
int i = 1;
while ((i <= L -> last) && (L -> data[i - 1] != x))
i++;
if (i <= L -> last)
printf("\n您要找的数在第%d个位置.\n", i, i);
else
printf("\n查无此数!\n");
}
int delete_sqlist (sqlistTp *L, int i)
{
int j;
if ((i < 1) || (i > L -> last))
{
printf("\n非法位置!\n");
return 0;
}
for (j = i + 1; j < L -> last; j++)
L -> data[j - 2] = L -> data[j - 1];
L -> last = L -> last - 1;
}
[/code:1] |
|