- 论坛徽章:
- 0
|
第一个是线性表顺序链接。编译成功,运行有个小错误。就是删除结点结束后。最后一个结点和前驱结点相同。我找来找去找不出原因。郁闷中。- #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;
- }
复制代码 |
|