已知Sqlist 是一个结构体变量, 其中包含data这类整形元素, 定义一个 Sqlist *L. L->data = (* L).data.
#include <cstdio> #include <cstdlib> #define OK 1 #define ERROR 0 #define MAXSIZE 20 typedef int Status; typedef int ElemType; typedef struct { ElemType data[MAXSIZE]; int length; } Sqlist; Sqlist Q, S, R; Status GetELem(Sqlist L, int i, ElemType *e) //用e返回L中第i个元素的值(地址)。 { if(L.length == 0 || i < 1 || i > L.length) return ERROR; *e = L.data[i-1]; return OK; } void ListInput(int l, Sqlist *L) { int n; printf("输入链表%d元素个数: ", l); scanf("%d", &n); printf("输入链表%d元素: ", l); for(int i = 0; i < n; i++) scanf("%d", &L->data[i]); L->length = n; } void ListOutput(Sqlist *L) { for(int i = 0; i < L->length; i++) printf("%d ", L->data[i]); printf(" "); } Status ListInsert(Sqlist *L, int i, ElemType e) //在表L中位置i处插入一个元素e { if(L->length == MAXSIZE) { printf("ERROR:超出数组最大空间分配 "); return ERROR; } if(i < 1 || i > L->length+1) { printf("ERROR:插入位置不与任一元素邻居 "); return ERROR; } if(i <= L->length) { for(int k = L->length-1; k >= i-1; k--) L->data[k+1] = L->data[k]; } L->data[i-1] = e; L->length++; } Status ListDelete(Sqlist *L, int i, ElemType *e) //删除第i个位置元素; { if(L->length == 0) { printf("顺序表中不存在元素 "); return ERROR; } if(i < 1 || i > L->length) { printf("ERROR "); return ERROR; } *e = L->data[i-1]; if(i <= L->length) { for(int k = i; k < L->length; k++) L->data[k-1] = L->data[k]; } L->length--; } void ListMercy(Sqlist *L, Sqlist *I, Sqlist *N) { int sum = 0; int lengthL = L->length; int lengthI = I->length; for(int i = 0; i < lengthI; i++) N->data[i] = I->data[i]; N->length = L->length; // printf("%d ", N->length); for(int i = 0; i < lengthL; i++) { for(int j = 0; j < N->length; j++) if(L->data[i] != N->data[j]) sum++; if(sum == N->length) N->data[N->length++] = L->data[i]; sum = 0; } //printf("%d ", N->length); } int main() { int OP; printf("1:对链表1操作 2:对链表2操作 3:合并操作 "); while(scanf("%d", &OP), OP) { switch(OP) { case 1:{ system("cls"); printf("对链表1操作: "); ListInput(1, &Q); int a, b, T; printf("分别输入待插入位置 及 元素: "); scanf("%d%d", &a, &b); ListInsert(&Q, a, b); printf("输入待删除位置: "); scanf("%d", &a); ListDelete(&Q, a, &T); printf("输出链表1 "); ListOutput(&Q); break; } case 2:{ system("cls"); printf("对链表2操作: "); ListInput(2, &S); int c, d, F; printf("分别输入待插入位置 及 元素: "); scanf("%d%d", &c, &d); ListInsert(&S, c, d); printf("输入待删除位置: "); scanf("%d", &c); ListDelete(&S, c, &F); printf("输出链表2 "); ListOutput(&S); break; } case 3:{ system("cls"); printf("合并链表1, 2 "); ListMercy(&Q, &S, &R); printf("输出合并后链表: "); ListOutput(&R); } // printf("1:对链表1操作 2:对链表2操作 3:合并操作 "); } } return 0; }