点击(此处)折叠或打开
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- #define ERROR 0
- #define OK 1
- #define EQUAL 1
- #define OVERFLOW -1
- #define LIST_INIT_SIZE 100
- #define LISTINCREMENT 10
- typedef struct {
- int *elem;
- int length;
- int listsize;
- }SqList;
- void InitList (SqList *L);
- void ListInsert (SqList *L, int i, int e);
- void MergeList (SqList La, SqList Lb, SqList *Lc);
- void ListDeleteReprat(SqList *L);
- void PrintList (SqList L);
- int main ()
- {
- SqList La, Lb, Lc;
- int numa, numb;
- int i;
- int TempNum;
-
- InitList (&La);
- printf ("The Number of Second List:");
- scanf ("%d",&numa);
- for (i = 0; i < numa; i++)
- {
- printf ("input %d number:", i+1);
- scanf ("%d", &TempNum);
- ListInsert (&La, i+1, TempNum);
- }
- InitList (&Lb);
- printf ("The Number of Second List:");
- scanf ("%d",&numb);
- for (i = 0; i < numb; i++)
- {
- printf ("input %d number:", i+1);
- scanf ("%d", &TempNum);
- ListInsert (&Lb, i+1, TempNum);
- }
-
- MergeList (La, Lb, &Lc);
- ListDeleteReprat (&Lc);
-
- printf ("First List:");
- PrintList (La);
- printf ("Second List:");
- PrintList (Lb);
- printf ("Union List:");
- PrintList (Lc);
- getch ();
- }
- void InitList (SqList *L)
- {
- L->elem = (int *)malloc(LIST_INIT_SIZE * sizeof (int));
- if (!L->elem)
- exit(OVERFLOW);
- L->length = 0;
- L->listsize = LIST_INIT_SIZE;
- }
- void ListInsert (SqList *L, int i, int e)
- {
- int *q, *p;
- int *newbase;
- if (i < 1 || i > L->length + 1)
- return;
- if (L->length >= L->listsize)
- {
- newbase = (int *)realloc(L->elem,
- (L->listsize + LISTINCREMENT)*sizeof(int));
- if (!newbase)
- exit (OVERFLOW);
- L->elem = newbase;
- L->listsize += LISTINCREMENT;
- }
- q = &(L->elem[i-1]);
- for (p = &(L->elem[L->length-1]); p >= q; p--)
- {
- *(p+1) = *p;
- }
- *q = e;
- L->length++;
- }
- void MergeList (SqList La, SqList Lb, SqList *Lc)
- {
- int *pa;
- int *pb;
- int i = 0;
- int j = 0;
- int k = 0;
- InitList (Lc);
- Lc->length = La.length + Lb.length;
- Lc->elem = (int *)malloc(Lc->length * sizeof (int));
- while (i < La.length && j < Lb.length)
- {
- if (La.elem[i] >= Lb.elem[j])
- {
- Lc->elem[k] = La.elem[i];
- i++;
- k++;
- }
- else
- {
- Lc->elem[k] = Lb.elem[j];
- j++;
- k++;
- }
- }
- while (i < La.length)
- {
- Lc->elem[k] = La.elem[i];
- i++;
- k++;
- }
- while (j < La.length)
- {
- Lc->elem[k] = La.elem[j];
- j++;
- k++;
- }
- }
- void ListDeleteReprat(SqList *L)
- {
- int i;
- int j;
- int k;
- for (i = 0; i < L->length - 1; i++)
- {
- for (j = i + 1; j < L->length; j++)
- {
- if (L -> elem[i] == L -> elem[j])
- {
- k = j;
- while (k < L->length - 1)
- {
- L->elem[k] = L->elem[k+1];
- k++;
- }
- L->length--;
- j--;
- }
- }
- }
- }
- void PrintList (SqList L)
- {
- int i;
- for (i = 0; i < L.length; i++)
- printf ("%d ", L.elem[i]);
- printf ("\n");
- }
相关热门文章
给主人留下些什么吧!~~
评论热议