int main()
{
    StaticLinkList L;
    Status i;
    i=InitList(L);
    printf("初始化L后:L.length=%d\n",ListLength(L));

    i=ListInsert(L,1,'F');
    i=ListInsert(L,1,'E');
    i=ListInsert(L,1,'D');
    i=ListInsert(L,1,'B');
    i=ListInsert(L,1,'A');

    printf("在L的表头依次插入FEDBA后:\nL.data=");
    ListTraverse(L);

    i=ListInsert(L,3,'C');
    printf("\n在L的“B”与“D”之间插入“C”后:\nL.data=");
    ListTraverse(L);

    i=ListDelete(L,1);
    printf("\n在L的删除“A”后:\nL.data=");
    ListTraverse(L);

    printf("\n");

    return 0;
}
Ejemplo n.º 2
0
Archivo: Test.c Proyecto: wugsh/wgs
main()
{
	DList *plist = NULL;
	PNode p = NULL;
	
	plist = InitList();
	p = InsFirst(plist,MakeNode(1));
	InsBefore(plist,p,MakeNode(2));
	InsAfter(plist,p,MakeNode(3));

	printf("p前驱位置的值为%d\n",GetItem(GetPrevious(p)));
	printf("p位置的值为%d\n",GetItem(p));
	printf("p后继位置的值为%d\n",GetItem(GetNext(p)));
	
	
	printf("遍历输出各节点数据项:\n");
	ListTraverse(plist,print);
	printf("除了头节点该链表共有%d个节点\n",GetSize(plist));
	FreeNode(DelFirst(plist));
	printf("删除第一个节点后重新遍历输出为:\n");
	ListTraverse(plist,print);
	printf("除了头节点该链表共有%d个节点\n",GetSize(plist));
	DestroyList(plist);
	printf("链表已被销毁\n");
}
Ejemplo n.º 3
0
int main(int argc, char *argv[])
{
	DataType a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9,};
	DataType b[] = {10, 11, 12, 13, 14, 15};
	DataType e;

	CirList A;	/* 声明循环链表A和B */
	CirList B;
	p_CirList C = NULL;

	InitList(&A);	/* 初始化 */
	InitList(&B);
	C = &A;

	/* 插入元素 */
	Insert_Elem(&A, a, sizeof(a) / sizeof(DataType));
	Insert_Elem(&B, b, sizeof(b) / sizeof(DataType));

	printf("循环链表A中有%d个元素\n", ListLength(A));
	ListTraverse(A, Show_Elem);
	
	putchar('\n');

	printf("循环链表B中有%d个元素\n", ListLength(B));
	ListTraverse(B, Show_Elem);

	puts("\n\n");

	if (GetElem(&A, 8, &e))
		printf("循环链表A第8个元素是%4d\n", e);
	
	if (GetElem(&B, 5, &e))
		printf("循环链表B第5个元素是%4d\n", e);
	putchar('\n');

	printf("删除链表B最后一个元素\n");
	ListDelete(&B, 6, &e);
	ListTraverse(B, Show_Elem);

	putchar('\n');

	C = Merge(&A, &B);	/* 合并 */
	
	printf("合并后的链表有%d个元素\n", ListLength(*C));
	ListTraverse(*C, Show_Elem);	

	putchar('\n');
	
	if (GetElem(C, 14, &e))
		printf("合并后的链表第14个元素是%4d\n", e);

	ClearList(&A);
	ClearList(&B);
	
	putchar('\n');
	
	exit(EXIT_SUCCESS);
}
Ejemplo n.º 4
0
int main()
{
    List list;
    InitList(&list);
    printf("创建线性表后线性表的当前长度:%d\n", list.length);  
    printf("ListTraverse:");
    
    //initialize
    int j;
    for(j = 0; j < 10; j++) {
        list.elem[j] = j;
        list.length++;  
    }
    printf("after sqlist inited: %d=====%d\n", list.listsize, list.length);

    //test DestoryList
    /*DestoryList(&list);
    printf("After Destory List %d=====%d\n", list.listsize, list.length);*/

    //test ListEmpty(List *list);
    printf("Is List Empty? %s\n", ListEmpty(&list) ? "true" : "false");

    //test GetElem(List *list, int i, ElemType *e)
    ElemType e1;
    if(GetElem(&list, 3, &e1) ) {
        printf("Get index 3 element from list: %d\n", e1);
    }
    
    /*for(j = 0; j < list.length; j++) {
        if(list.elem[j] == 3)
            printf("i found %d in list index %d\n", 3, j);
    }*/

    //test LocateElem
    ElemType e2 = 3;
    int position = LocateElem(&list, &e2);
    printf("%d\n", position);
    if (position >= 0)
        printf("I find e2 in list, it's index is %d\n", position);
    else 
        printf("Not Found!\n");
    
    //test ListInsert(List *list, int i, ElemType *e);
    ElemType e3 = 100;
    if(ListInsert(&list, 2, &e3)) {
        ListTraverse(&list);
    }

    //test BOOL ListDelete
    ElemType e4;
    if(ListDelete(&list, 2, &e4)) {
        printf("Delete index %d ElemType %d success\n", 1, e4);
    }
    ListTraverse(&list);

    return 0;
}
Ejemplo n.º 5
0
 void main()
 {
   SqList L;
   ElemType d,e;
   Status i;
   int n;
   printf("按非降序建立n个元素的线性表L,请输入元素个数n: ");
   scanf("%d",&n);
   CreatAscend(L,n);
   printf("依次输出L的元素:");
   ListTraverse(L,visit);
   InsertAscend(L,10); // 按非降序插入元素10
   printf("按非降序插入元素10后,线性表L为:");
   ListTraverse(L,visit);
   HeadInsert(L,12); // 在L的头部插入12
   EndInsert(L,9); // 在L的尾部插入9
   printf("在L的头部插入12,尾部插入9后,线性表L为:");
   ListTraverse(L,visit);
   printf("请输入要删除的元素的值: ");
   cin>>e;
   i=DeleteElem(L,e);
   if(i)
     cout<<"成功删除"<<e<<'!'<<endl;
   else
     cout<<"不存在元素"<<e<<'!'<<endl;
   printf("线性表L为:");
   ListTraverse(L,visit);
   printf("请输入要取代的元素的序号 元素的新值: ");
   cin>>n>>e;
   ReplaceElem(L,n,e);
   printf("线性表L为:");
   ListTraverse(L,visit);
   DestroyList(L);
   printf("销毁L后,按非升序重新建立n个元素的线性表L,请输入元素个数n(>2):");
   scanf("%d",&n);
   CreatDescend(L,n);
   printf("依次输出L的元素:");
   ListTraverse(L,visit);
   InsertDescend(L,10); // 按非升序插入元素10
   printf("按非升序插入元素10后,线性表L为:");
   ListTraverse(L,visit);
   printf("请输入要删除的元素的值: ");
   cin>>e;
   i=DeleteElem(L,e);
   if(i)
     cout<<"成功删除"<<e<<'!'<<endl;
   else
     cout<<"不存在元素"<<e<<'!'<<endl;
   printf("线性表L为:");
   ListTraverse(L,visit);
   DeleteFirst(L,e);
   DeleteTail(L,d);
   cout<<"删除表头元素"<<e<<"和表尾元素"<<d<<"后,线性表L为:"<<endl;
   ListTraverse(L,visit);
 }
Ejemplo n.º 6
0
void main()
{
    SqList L;
    ElemType d,e;
    Status i;
    int n;
    printf("按非降序建立n个元素的线性表L,请输入元素个数n: ");
    scanf("%d",&n);
    CreatAscend(&L,n);
    printf("依次输出L的元素:");
    ListTraverse(L,visit);
    InsertAscend(&L,10); /* 按非降序插入元素10 */
    printf("按非降序插入元素10后,线性表L为:");
    ListTraverse(L,visit);
    HeadInsert(&L,12); /* 在L的头部插入12 */
    EndInsert(&L,9); /* 在L的尾部插入9 */
    printf("在L的头部插入12,尾部插入9后,线性表L为:");
    ListTraverse(L,visit);
    printf("请输入要删除的元素的值: ");
    scanf("%d",&e);
    i=DeleteElem(&L,e);
    if(i)
        printf("成功删除%d\n",e);
    else
        printf("不存在元素%d!\n",e);
    printf("线性表L为:");
    ListTraverse(L,visit);
    printf("请输入要取代的元素的序号 元素的新值: ");
    scanf("%d%d",&n,&e);
    ReplaceElem(L,n,e);
    printf("线性表L为:");
    ListTraverse(L,visit);
    DestroyList(&L);
    printf("销毁L后,按非升序重新建立n个元素的线性表L,请输入元素个数n(>2): ");
    scanf("%d",&n);
    CreatDescend(&L,n);
    printf("依次输出L的元素:");
    ListTraverse(L,visit);
    InsertDescend(&L,10); /* 按非升序插入元素10 */
    printf("按非升序插入元素10后,线性表L为:");
    ListTraverse(L,visit);
    printf("请输入要删除的元素的值: ");
    scanf("%d",&e);
    i=DeleteElem(&L,e);
    if(i)
        printf("成功删除%d\n",e);
    else
        printf("不存在元素%d!\n",e);
    printf("线性表L为:");
    ListTraverse(L,visit);
    DeleteFirst(&L,&e);
    DeleteTail(&L,&d);
    printf("删除表头元素%d和表尾元素%d后,线性表L为:\n",e,d);
    ListTraverse(L,visit);
}
Ejemplo n.º 7
0
/*
 * 给定两个单链表,找出两个链表的公共节点
 * 思路:由于每个单链表节点只有一个next域,所以从第一个公共节点开始往后,链表都是重合的
 * 先遍历两个链表,得到链表的长度,并求出长度差,在长链表上先遍历长度之差个节点之后,再
 * 同步遍历两个链表,直到找到相同的节点,或者一直到链表结束
 * 时间复杂度O(len1 + len2)
 */
void search_common(LinkList La, LinkList Lb)
{
    int len1 = ListLength(La);
    int len2 = ListLength(Lb);
    int dist;
    LinkList longlist, shortlist;

    if ( len1 > len2 )
    {
        longlist = La->next;
        shortlist = Lb->next;
        dist = len1 - len2;
    }
    else
    {
        longlist = Lb->next;
        shortlist = La->next;
        dist = len2 - len1;
    }

    while ( dist-- )
        longlist = longlist->next;
    while ( longlist )
    {
        if ( longlist == shortlist )
            ListTraverse(longlist, print);
        else
        {
            longlist = longlist->next;
            shortlist = shortlist->next;
        }
    }
}
Ejemplo n.º 8
0
 void main()
 {
   int k;
   SLinkList s;
   difference(s,k);
   ListTraverse(s,k,visit);
 }
Ejemplo n.º 9
0
 void main()
 {
   int n=5;
   LinkList La,Lb,Lc;
   printf("按非递减顺序, ");
   CreateList2(&La,n); /* 正位序输入n个元素的值 */
   printf("La="); /* 输出链表La的内容 */
   ListTraverse(La,print);
   printf("按非递增顺序, ");
   CreateList(&Lb,n); /* 逆位序输入n个元素的值 */
   printf("Lb="); /* 输出链表Lb的内容 */
   ListTraverse(Lb,print);
   MergeList(La,&Lb,&Lc); /* 按非递减顺序归并La和Lb,得到新表Lc */
   printf("Lc="); /* 输出链表Lc的内容 */
   ListTraverse(Lc,print);
 }
Ejemplo n.º 10
0
int main(int argc, char *argv[]) 
{
    char initial[10001] = {0};
    int n, i;
    char ch;
    List L;
 
#ifdef _OJ_
    const int SZ = 1<<20;
    char inbuf[SZ];
    char outbuf[SZ];
    setvbuf(stdin,inbuf,_IOFBF,SZ);
    setvbuf(stdout,outbuf,_IOFBF,SZ);
#endif   

    scanf("%s", initial);
    
    InitList(&L, initial);
    
    scanf("%d", &n);
    while( n-- )
    {
        scanf("%d %c", &i, &ch);
        ListInsert(L, i, ch);
        ListTraverse(L);    
    }
    
    return 0;
}
Ejemplo n.º 11
0
void main()
{
	int n = 5;
	LinkList La, Lb, Lc;

	printf("按非递减顺序,");
	CreateList1(La, n);
	printf("La=");
	ListTraverse(La, print);
	printf("按非递增顺序,");
	CreateList(Lb, n);
	printf("Lb=");
	ListTraverse(Lb, print);
	MergeList(La, Lb, Lc);
	printf("Lc=");
	ListTraverse(Lc, print);
}
Ejemplo n.º 12
0
void main()
{
	SqList La, Lb, Lc;
	int j;
	InitList(&La); /* 创建空表La */
	for (j = 1; j <= 5; j++) /* 在表La中插入5个元素 */
		ListInsert(&La, j, j);
	printf("La= "); /* 输出表La的内容 */
	ListTraverse(La, print);
	InitList(&Lb); /* 创建空表Lb */
	for (j = 1; j <= 5; j++) /* 在表Lb中插入5个元素 */
		ListInsert(&Lb, j, 2 * j);
	printf("Lb= "); /* 输出表Lb的内容 */
	ListTraverse(Lb, print);
	MergeList(La, Lb, &Lc);
	printf("Lc= "); /* 输出表Lc的内容 */
	ListTraverse(Lc, print);
}
Ejemplo n.º 13
0
void main()
{
	SqList La, Lb;
	int j;
	InitList(La);
	for ( j = 1; j <= 5; j++ )
		ListInsert(La, j, j);
	printf("La = ");
	ListTraverse(La, print1);
	InitList(Lb);
	for ( j = 1; j <= 5; j++ )
		ListInsert(Lb, j, 2 * j);
	printf("Lb = ");
	ListTraverse(Lb, print1);
	Union(La, Lb);
	printf("new La= ");
	ListTraverse(La, print1);
}
Ejemplo n.º 14
0
 void main()
 {
   SqList La,Lb,Lc;
   int j,a[4]={3,5,8,11},b[7]={2,6,8,9,11,15,20};
   InitList(La); // 创建空表La
   for(j=1;j<=4;j++) // 在表La中插入4个元素
     ListInsert(La,j,a[j-1]);
   printf("La= "); // 输出表La的内容
   ListTraverse(La,print1);
   InitList(Lb); // 创建空表Lb
   for(j=1;j<=7;j++) // 在表Lb中插入7个元素
     ListInsert(Lb,j,b[j-1]);
   printf("Lb= "); // 输出表Lb的内容
   ListTraverse(Lb,print1);
   MergeList(La,Lb,Lc);
   printf("Lc= "); // 输出表Lc的内容
   ListTraverse(Lc,print1);
 }
Ejemplo n.º 15
0
void main()
{
    SqList La, Lb, Lc;
    int j;

    InitList(La);
    for ( j = 1; j <= 5; j++ )
        ListInsert(La, j, j);
    printf("La = ");
    ListTraverse(La, print1);

    InitList(Lb);
    for ( j = 1; j <= 5; j++ )
        ListInsert(Lb, j, j*2);
    printf("Lb = ");
    ListTraverse(Lb, print1);
    MergeList(La, Lb, Lc);
    printf("Lc = ");
    ListTraverse(Lc, print1);
}
Ejemplo n.º 16
0
void StackTraverse(LinkStack S, void (*visit)(SElemType))
{//从栈底到栈顶依次对栈中每个元素调用函数visit()
	LinkStack temp, p = S;
	InitStack(temp);
	while ( p )
	{
		Push(temp, p->data);
		p = p->next;
	}
	ListTraverse(temp, visit);
}
Ejemplo n.º 17
0
void main()
{
	LinkList L;
	ElemType e;
	int j;
	Status i;
	InitList(L);
	i = ListEmpty(L);
	printf("L是否空 i = %d (1:空 0:否)\n", i);
	ListInsert(L, 1, 3);
	ListInsert(L, 2, 5);
	i = GetElem(L, 1, e);
	j = ListLength(L);
	printf("L中的数据元素个数=%d, 第一个数据元素的值为%d.\n", j, e);
	printf("L中的数据元素依次为:");
	ListTraverse(L, print);
	PriorElem(L, 5, e);
	printf("5前面的元素的值为%d.\n", e);
	NextElem(L, 3, e);
	printf("3后面的元素的值为%d.\n", e);
	printf("L是否空 %d(1:空 0:否)\n", ListEmpty(L));
	j = LocateElem(L, 5, equal);
	if ( j )
		printf("L的第%d个元素为5.\n", j);
	else
		printf("不存在值为5的元素.\n");
	i = ListDelete(L, 2, e);
	printf("删除L的第2个元素:\n");
	if ( i )
	{
		printf("删除的元素值为%d, 现在L中的数据元素依次为", e);
		ListTraverse(L, print);
	}
	else
		printf("删除不成功!\n");
	ClearList(L);
	printf("清空L后, L是否空:%d (1:空 0:否)\n", ListEmpty(L));
	DestroyList(L);
}
Ejemplo n.º 18
0
void main()
{
  DuLinkList L;
  int i,n=2;
  ElemType e;
  InitList(&L);
  printf("初始化链表依次输入1,2,3,4,5\n");
  for(i=1;i<=5;i++)
    ListInsert(L,i,i); /* 在第i个结点之前插入i */
  ListDelete(L,n,&e); /* 删除并释放第n个结点 */
  printf("删除第%d个结点,值为%d,其余结点为:",n,e);
  ListTraverse(L,vd); /* 正序输出 */
}
Ejemplo n.º 19
0
 Status StackTraverse(LinkStack S,void(*visit)(SElemType))
 { /* 从栈底到栈顶依次对栈中每个元素调用函数visit()。 */
   SElemType e;
   LinkStack temp,p=S;
   InitStack(&temp); /* 初始化temp栈 */
   while(p->next)
   {
     GetTop(p,&e);
     Push(temp,e);
     p=p->next;
   }
   ListTraverse(temp,visit);
   return OK;
 }
Ejemplo n.º 20
0
int main()
{
    Sqlist La, Lb, Lc;
    int j;

    InitList(La);
    for ( j = 1; j <= 5; j++ )
        ListInsert_before(La, j, j);
    printf("La = ");
    ListTraverse(La, print1);

    InitList(Lb);
    for ( j = 1; j <= 5; j++ )
        ListInsert_before(Lb, j, 2*j);
    printf("Lb = ");
    ListTraverse(Lb, print1);

    MergeList2(La, Lb, Lc);
    printf("Lc = ");
    ListTraverse(Lc, print1);

    DestroyList(La);
    return 0;
}
Ejemplo n.º 21
0
int main()
{
    LinkList L;
    InitList(&L);
    Link test=NULL;
    ElemType array[10] = {10,9,8,7,6,5,4,3,2,1};
    /*ElemType array[10] = {0,9,8,7,6,5,4,3,2,1};*/

    CreateListByArray(array,sizeof(array)/sizeof(ElemType),&L,&InsFirst);
    printf("Length= %d\n",ListLength(L));
    LocatePos(L,9,&test);
    printf("第9个节点数据为%d\n",test->data) ;
    printf("%s\n","------------------------------------") ;
    ListTraverse(L,&Myvist);
    DestroyList(&L);
    return 0;
}
Ejemplo n.º 22
0
 void main() /* 除了几个输出语句外,主程和main2-1.c很像 */
 {
   LinkList L; /* 与main2-1.c不同 */
   ElemType e,e0;
   Status i;
   int j,k;
   i=InitList(&L);
   for(j=1;j<=5;j++)
     i=ListInsert(L,1,j);
   printf("在L的表头依次插入1~5后:L=");
   ListTraverse(L,visit); /* 依次对元素调用visit(),输出元素的值 */
   i=ListEmpty(L);
   printf("L是否空:i=%d(1:是 0:否)\n",i);
   i=ClearList(L);
   printf("清空L后:L=");
   ListTraverse(L,visit);
   i=ListEmpty(L);
   printf("L是否空:i=%d(1:是 0:否)\n",i);
   for(j=1;j<=10;j++)
     ListInsert(L,j,j);
   printf("在L的表尾依次插入1~10后:L=");
   ListTraverse(L,visit);
   GetElem(L,5,&e);
   printf("第5个元素的值为:%d\n",e);
   for(j=0;j<=1;j++)
   {
     k=LocateElem(L,j,comp);
     if(k)
       printf("第%d个元素的值为%d\n",k,j);
     else
       printf("没有值为%d的元素\n",j);
   }
   for(j=1;j<=2;j++) /* 测试头两个数据 */
   {
     GetElem(L,j,&e0); /* 把第j个数据赋给e0 */
     i=PriorElem(L,e0,&e); /* 求e0的前驱 */
     if(i==INFEASIBLE)
       printf("元素%d无前驱\n",e0);
     else
       printf("元素%d的前驱为:%d\n",e0,e);
   }
   for(j=ListLength(L)-1;j<=ListLength(L);j++)/*最后两个数据 */
   {
     GetElem(L,j,&e0); /* 把第j个数据赋给e0 */
     i=NextElem(L,e0,&e); /* 求e0的后继 */
     if(i==INFEASIBLE)
       printf("元素%d无后继\n",e0);
     else
       printf("元素%d的后继为:%d\n",e0,e);
   }
   k=ListLength(L); /* k为表长 */
   for(j=k+1;j>=k;j--)
   {
     i=ListDelete(L,j,&e); /* 删除第j个数据 */
     if(i==ERROR)
       printf("删除第%d个数据失败\n",j);
     else
       printf("删除的元素为:%d\n",e);
   }
   printf("依次输出L的元素:");
   ListTraverse(L,visit);
   DestroyList(&L);
   printf("销毁L后:L=%u\n",L);
 }
int main()
{

    SqList L;
	SqList Lb;

    ElemType e;
    Status i;
    int j,k;
    i=InitList(&L);
    printf("初始化L后:L.length=%d\n",L.length);
    for(j=1;j<=5;j++)
            i=ListInsert(&L,1,j);
    printf("在L的表头依次插入1~5后:L.data=");
    ListTraverse(L);

    printf("L.length=%d \n",L.length);
    i=ListEmpty(L);
    printf("L是否空:i=%d(1:是 0:否)\n",i);

    i=ClearList(&L);
    printf("清空L后:L.length=%d\n",L.length);
    i=ListEmpty(L);
    printf("L是否空:i=%d(1:是 0:否)\n",i);

    for(j=1;j<=10;j++)
            ListInsert(&L,j,j);
    printf("在L的表尾依次插入1~10后:L.data=");
    ListTraverse(L);

    printf("L.length=%d \n",L.length);

    ListInsert(&L,1,0);
    printf("在L的表头插入0后:L.data=");
    ListTraverse(L);
    printf("L.length=%d \n",L.length);

    GetElem(L,5,&e);
    printf("第5个元素的值为:%d\n",e);
    for(j=3;j<=4;j++)
    {
            k=LocateElem(L,j);
            if(k)
                    printf("第%d个元素的值为%d\n",k,j);
            else
                    printf("没有值为%d的元素\n",j);
    }


    k=ListLength(L); /* k为表长 */
    for(j=k+1;j>=k;j--)
    {
            i=ListDelete(&L,j,&e); /* 删除第j个数据 */
            if(i==ERROR)
                    printf("删除第%d个数据失败\n",j);
            else
                    printf("删除第%d个的元素值为:%d\n",j,e);
    }
    printf("依次输出L的元素:");
    ListTraverse(L);

    j=5;
    ListDelete(&L,j,&e); /* 删除第5个数据 */
    printf("删除第%d个的元素值为:%d\n",j,e);

    printf("依次输出L的元素:");
    ListTraverse(L);

	//构造一个有10个数的Lb
	i=InitList(&Lb);
    for(j=6;j<=15;j++)
            i=ListInsert(&Lb,1,j);

	unionL(&L,Lb);

	printf("依次输出合并了Lb的L的元素:");
    ListTraverse(L);

    return 0;
}
Ejemplo n.º 24
0
   /* 并返回TRUE;如无此元素,则返回FALSE */
   *p=L;
   while(*p)
   {
     *q=(*p)->next;
     if(*q&&!strcmp((*q)->data.name,name)) /* 找到该姓名 */
       return TRUE;
     *p=*q;
   }
   return FALSE;
 }

 Status DeleteElemNum(LinkList L,long num)
 { /* 删除表中学号为num的元素,并返回TRUE;如无此元素,则返回FALSE */
   LinkList p,q;
   if(FindFromNum(L,num,&p,&q)) /* 找到此结点,且q指向其,p指向其前驱 */
   {
     p->next=q->next;
     free(q);
     return TRUE;
   }
   return FALSE;
 }

 Status DeleteElemName(LinkList L,char name[])
 { /* 删除表中姓名为name的元素,并返回TRUE;如无此元素,则返回FALSE */
   LinkList p,q;
   if(FindFromName(L,name,&p,&q)) /* 找到此结点,且q指向其,p指向其前驱 */
   {
     p->next=q->next;
     free(q);
     return TRUE;
   }
   return FALSE;
 }

 void Modify(ElemType *e)
 { /* 修改结点内容 */
   char s[80];
   Print(*e); /* 显示原内容 */
   printf("请输入待修改项的内容,不修改的项按回车键保持原值:\n");
   printf("请输入姓名(<=%d个字符): ",NAMELEN);
   gets(s);
   if(strlen(s))
     strcpy(e->name,s);
   printf("请输入学号: ");
   gets(s);
   if(strlen(s))
     e->num=atol(s);
   printf("请输入性别(m:男 f:女): ");
   gets(s);
   if(strlen(s))
     e->sex=s[0];
   printf("请输入年龄: ");
   gets(s);
   if(strlen(s))
     e->age=atoi(s);
   printf("请输入班级(<=%d个字符): ",CLASSLEN);
   gets(s);
   if(strlen(s))
     strcpy(e->Class,s);
   printf("请输入健康状况(0:%s 1:%s 2:%s):",sta[0],sta[1],sta[2]);
   gets(s);
   if(strlen(s))
     e->health=atoi(s); /* 修改完毕 */
 }

 #define N 4 /* student记录的个数 */
 void main()
 {
   struct stud student[N]={{"王小林",790631,'m',18,"计91",0},
                           {"陈红",790632,'f',20,"计91",1},
                           {"刘建平",790633,'m',21,"计91",0},
                           {"张立立",790634,'m',17,"计91",2}}; /* 表的初始记录 */
   int i,j,flag=1;
   long num;
   char filename[13],name[NAMELEN+1];
   ElemType e;
   LinkList T,p,q;
   InitList(&T); /* 初始化链表 */
   while(flag)
   {
     printf("1:将结构体数组student中的记录按学号非降序插入链表\n");
     printf("2:将文件中的记录按学号非降序插入链表\n");
     printf("3:键盘输入新记录,并将其按学号非降序插入链表\n");
     printf("4:删除链表中第一个有给定学号的记录\n");
     printf("5:删除链表中第一个有给定姓名的记录\n");
     printf("6:修改链表中第一个有给定学号的记录\n");
     printf("7:修改链表中第一个有给定姓名的记录\n");
     printf("8:查找链表中第一个有给定学号的记录\n");
     printf("9:查找链表中第一个有给定姓名的记录\n");
     printf("10:显示所有记录 11:将链表中的所有记录存入文件 12:结束\n");
     printf("请选择操作命令: ");
     scanf("%d",&i);
     switch(i)
     {
       case 1: for(j=0;j<N;j++)
                 InsertAscend(T,student[j]);
               break;
       case 2: printf("请输入文件名: ");
               scanf("%s",filename);
               if((fp=fopen(filename,"rb"))==NULL)
                 printf("打开文件失败!\n");
               else
               {
                 while(ReadFromFile(&e))
                   InsertAscend(T,e);
                 fclose(fp);
               }
               break;
       case 3: ReadIn(&e);
               InsertAscend(T,e);
               break;
       case 4: printf("请输入待删除记录的学号: ");
               scanf("%ld",&num);
               if(!DeleteElemNum(T,num))
                 printf("没有学号为%ld的记录\n",num);
               break;
       case 5: printf("请输入待删除记录的姓名: ");
               scanf("%s",name);
               if(!DeleteElemName(T,name))
                 printf("没有姓名为%s的记录\n",name);
               break;
       case 6: printf("请输入待修改记录的学号: ");
               scanf("%ld%*c",&num); /* %*c吃掉回车符 */
               if(!FindFromNum(T,num,&p,&q))
                 printf("没有学号为%ld的记录\n",num);
               else
               {
                 Modify(&q->data);
                 if(q->data.num!=num) /* 学号被修改 */
                 {
                   p->next=q->next; /* 把q所指的结点从L中删除 */
                   InsertAscend(T,q->data); /* 把元素插入L */
                   free(q); /* 删除q */
                 }
               }
               break;
       case 7: printf("请输入待修改记录的姓名: ");
               scanf("%s%*c",name); /* %*c吃掉回车符 */
               if(!FindFromName(T,name,&p,&q))
                 printf("没有姓名为%s的记录\n",name);
               else
               {
                 num=q->data.num; /* 学号存入num */
                 Modify(&q->data);
                 if(q->data.num!=num) /* 学号被修改 */
                 {
                   p->next=q->next; /* 把q所指的结点从L中删除 */
                   InsertAscend(T,q->data); /* 把元素插入L */
                   free(q); /* 删除q */
                 }
               }
               break;
       case 8: printf("请输入待查找记录的学号: ");
               scanf("%ld",&num);
               if(!FindFromNum(T,num,&p,&q))
                 printf("没有学号为%ld的记录\n",num);
               else
                 Print(q->data);
               break;
       case 9: printf("请输入待查找记录的姓名: ");
               scanf("%s",name);
               if(!FindFromName(T,name,&p,&q))
                 printf("没有姓名为%s的记录\n",name);
               else
               Print(q->data);
               break;
       case 10:printf("  姓名    学号 性别 年龄 班级 健康状况\n");
               ListTraverse(T,Print);
               break;
       case 11:printf("请输入文件名: ");
               scanf("%s",filename);
               if((fp=fopen(filename,"wb"))==NULL)
                 printf("打开文件失败!\n");
               else
                 ListTraverse(T,WriteToFile);
               fclose(fp);
               break;
       case 12:flag=0;
     }
   }
 }
Ejemplo n.º 25
0
void main()
{
	SqList L;
	ElemType e, e0;
	Status i;
	int j, k;
	i = InitList(&L);
	printf("初始化L后:L.elem=%u L.length=%d L.listsize=%d\n", L.elem, L.length, L.listsize);
	for (j = 1; j <= 5; j++)
		i = ListInsert(&L, 1, j);
	printf("在L的表头依次插入1~5后:*L.elem=");
	for (j = 1; j <= 5; j++)
		printf("%d ", *(L.elem + j - 1));
	printf("\n");
	printf("L.elem=%u L.length=%d L.listsize=%d\n", L.elem, L.length, L.listsize);
	i = ListEmpty(L);
	printf("L是否空:i=%d(1:是 0:否)\n", i);
	i = ClearList(&L);
	printf("清空L后:L.elem=%u L.length=%d L.listsize=%d\n", L.elem, L.length, L.listsize);
	i = ListEmpty(L);
	printf("L是否空:i=%d(1:是 0:否)\n", i);
	for (j = 1; j <= 10; j++)
		ListInsert(&L, j, j);
	printf("在L的表尾依次插入1~10后:*L.elem=");
	for (j = 1; j <= 10; j++)
		printf("%d ", *(L.elem + j - 1));
	printf("\n");
	printf("L.elem=%u L.length=%d L.listsize=%d\n", L.elem, L.length, L.listsize);
	ListInsert(&L, 1, 0);
	printf("在L的表头插入0后:*L.elem=");
	for (j = 1; j <= ListLength(L); j++) /* ListLength(L)为元素个数 */
		printf("%d ", *(L.elem + j - 1));
	printf("\n");
	printf("L.elem=%u(有可能改变) L.length=%d(改变) L.listsize=%d(改变)\n", L.elem, L.length, L.listsize);
	GetElem(L, 5, &e);
	printf("第5个元素的值为:%d\n", e);
	for (j = 3; j <= 4; j++)
	{
		k = LocateElem(L, j, comp);
		if (k)
			printf("第%d个元素的值为%d的平方\n", k, j);
		else
			printf("没有值为%d的平方的元素\n", j);
	}
	for (j = 1; j <= 2; j++) /* 测试头两个数据 */
	{
		GetElem(L, j, &e0); /* 把第j个数据赋给e0 */
		i = PriorElem(L, e0, &e); /* 求e0的前驱 */
		if (i == INFEASIBLE)
			printf("元素%d无前驱\n", e0);
		else
			printf("元素%d的前驱为:%d\n", e0, e);
	}
	for (j = ListLength(L) - 1; j <= ListLength(L); j++) /* 最后两个数据 */
	{
		GetElem(L, j, &e0); /* 把第j个数据赋给e0 */
		i = NextElem(L, e0, &e); /* 求e0的后继 */
		if (i == INFEASIBLE)
			printf("元素%d无后继\n", e0);
		else
			printf("元素%d的后继为:%d\n", e0, e);
	}
	k = ListLength(L); /* k为表长 */
	for (j = k + 1; j >= k; j--)
	{
		i = ListDelete(&L, j, &e); /* 删除第j个数据 */
		if (i == ERROR)
			printf("删除第%d个数据失败\n", j);
		else
			printf("删除的元素值为:%d\n", e);
	}
	printf("依次输出L的元素:");
	ListTraverse(L, visit); /* 依次对元素调用visit(),输出元素的值 */
	printf("L的元素值加倍后:");
	ListTraverse(L, dbl); /* 依次对元素调用dbl(),元素值乘2 */
	ListTraverse(L, visit);
	DestroyList(&L);
	printf("销毁L后:L.elem=%u L.length=%d L.listsize=%d\n", L.elem, L.length, L.listsize);
}
Ejemplo n.º 26
0
void SubtractPolyn(polynomail *pa, polynomail *pb) {
	ListTraverse(*pb, inverse);
	AddPolyn(pa, pb);
}
Ejemplo n.º 27
0
 void main()
 {
   int j,k;
   Status i;
   ElemType e,e0;
   SLinkList L;
   InitList(L);
   for(j=1;j<=5;j++)
     i=ListInsert(L,1,j);
   printf("在L的表头依次插入1~5后:L=");
   ListTraverse(L,visit);
   i=ListEmpty(L);
   printf("L是否空:i=%d(1:是 0:否)表L的长度=%d\n",i,ListLength(L));
   i=ClearList(L);
   printf("清空L后:L=");
   ListTraverse(L,visit);
   i=ListEmpty(L);
   printf("L是否空:i=%d(1:是 0:否)表L的长度=%d\n",i,ListLength(L));
   for(j=1;j<=10;j++)
     ListInsert(L,j,j);
   printf("在L的表尾依次插入1~10后:L=");
   ListTraverse(L,visit);
   GetElem(L,5,&e);
   printf("第5个元素的值为:%d\n",e);
   for(j=0;j<=1;j++)
   {
     k=LocateElem(L,j);
     if(k)
       printf("值为%d的元素在静态链表中的位序为%d\n",j,k);
     else
       printf("没有值为%d的元素\n",j);
   }
   for(j=1;j<=2;j++) /* 测试头两个数据 */
   {
     GetElem(L,j,&e0); /* 把第j个数据赋给e0 */
     i=PriorElem(L,e0,&e); /* 求e0的前驱 */
     if(!i)
       printf("元素%d无前驱\n",e0);
     else
       printf("元素%d的前驱为:%d\n",e0,e);
   }
   for(j=ListLength(L)-1;j<=ListLength(L);j++) /* 最后两个数据 */
   {
     GetElem(L,j,&e0); /* 把第j个数据赋给e0 */
     i=NextElem(L,e0,&e); /* 求e0的后继 */
     if(!i)
       printf("元素%d无后继\n",e0);
     else
       printf("元素%d的后继为:%d\n",e0,e);
   }
   k=ListLength(L); /* k为表长 */
   for(j=k+1;j>=k;j--)
   {
     i=ListDelete(L,j,&e); /* 删除第j个数据 */
     if(i)
       printf("删除的元素为:%d\n",e);
     else
       printf("删除第%d个数据失败\n",j);
   }
   printf("依次输出L的元素:");
   ListTraverse(L,visit); /* 依次对元素调用visit(),输出元素的值 */
 }
Ejemplo n.º 28
0
int main()
{
  SqlList L, Lb;
  ElemType e;
  Status i;
  int j, k;
  i = InitList(&L);
  printf("After init L L.length=%d \n", L.length);
  for (j = 1; j <= 5; j++)
  {
    i = ListInsert(&L, 1, j);
  }
  printf("After insert 1~5 in head of list L.data=");
  ListTraverse(L);
  printf("L.length=%d \n", L.length);
  i = ListEmpty(L);
  printf("Is L empty i=%d (1 is yes 0 is no) \n", i);

  i = ClearList(&L);
  printf("After clear L L.length=%d \n", L.length);
  i = ListEmpty(L);
  printf("Is L empty i=%d (1 is yes 0 is no) \n", i);

  for(j = 1; j <= 10; j++)
  {
    ListInsert(&L, j, j);
  }
  printf("After insert 1~10 in the end of list: L.data=");
  ListTraverse(L);

  printf("L.length = %d \n", L.length);

  ListInsert(&L, 1, 0);
  printf("After insert 0 in the head of L: L.data=");
  ListTraverse(L);
  printf("L.length = %d \n", L.length);

  GetElem(L, 5, &e);
  printf("The five element is: %d \n", e);
  for(j = 3; j <= 12; j++)
  {
    k = LocateElem(L, j);
    if (k)
      printf("The %d element value is %d \n", k, j);
    else
      printf("Not found %d element\n", j);
  }

  k = ListLength(L);
  for(j = k+1; j>= k; j--)
  {
    i = ListDelete(&L, j, &e);
    if (i == ERROR)
      printf("Delete the %d element failed \n", j);
    else
      printf("Delete the %d element is %d \n", j, e);
  }

  printf("Print all element of L \n");
  ListTraverse(L);

  j = 5;
  ListDelete(&L, j, &e);
  printf("Delete the %d element is %d \n", j, e);

  printf("Print all element of L \n");
  ListTraverse(L);

  i = InitList(&Lb);
  for(j = 6; j  <=15; j++)
  {
    i = ListInsert(&Lb, 1, j);
  }

  unionl(&L, Lb);

  printf("Print all element of L \n");
  ListTraverse(L);

  return 0;
}
int main()
{        
    LinkList L;
    ElemType e;
    Status i;
    int j,k;
    i=InitList(&L);
    printf("初始化L后:ListLength(L)=%d\n",ListLength(L));
    for(j=1;j<=5;j++)
            i=ListInsert(&L,1,j);
    printf("在L的表头依次插入1~5后:L.data=");
    ListTraverse(L); 

    printf("ListLength(L)=%d \n",ListLength(L));
    i=ListEmpty(L);
    printf("L是否空:i=%d(1:是 0:否)\n",i);

    i=ClearList(&L);
    printf("清空L后:ListLength(L)=%d\n",ListLength(L));
    i=ListEmpty(L);
    printf("L是否空:i=%d(1:是 0:否)\n",i);

    for(j=1;j<=10;j++)
            ListInsert(&L,j,j);
    printf("在L的表尾依次插入1~10后:L.data=");
    ListTraverse(L); 

    printf("ListLength(L)=%d \n",ListLength(L));

    ListInsert(&L,1,0);
    printf("在L的表头插入0后:L.data=");
    ListTraverse(L); 
    printf("ListLength(L)=%d \n",ListLength(L));

    GetElem(L,5,&e);
    printf("第5个元素的值为:%d\n",e);
    for(j=3;j<=4;j++)
    {
            k=LocateElem(L,j);
            if(k)
                    printf("第%d个元素的值为%d\n",k,j);
            else
                    printf("没有值为%d的元素\n",j);
    }
    

    k=ListLength(L); /* k为表长 */
    for(j=k+1;j>=k;j--)
    {
            i=ListDelete(&L,j,&e); /* 删除第j个数据 */
            if(i==ERROR)
                    printf("删除第%d个数据失败\n",j);
            else
                    printf("删除第%d个的元素值为:%d\n",j,e);
    }
    printf("依次输出L的元素:");
    ListTraverse(L); 

    j=5;
    ListDelete(&L,j,&e); /* 删除第5个数据 */
    printf("删除第%d个的元素值为:%d\n",j,e);

    printf("依次输出L的元素:");
    ListTraverse(L); 

    i=ClearList(&L);
    printf("\n清空L后:ListLength(L)=%d\n",ListLength(L));
    CreateListHead(&L,20);
    printf("整体创建L的元素(头插法):");
    ListTraverse(L); 
    
    i=ClearList(&L);
    printf("\n删除L后:ListLength(L)=%d\n",ListLength(L));
    CreateListTail(&L,20);
    printf("整体创建L的元素(尾插法):");
    ListTraverse(L); 


    return 0;
}
Ejemplo n.º 30
0
int main(int argc, char *argv[])
{
    int i,j;
    ElemType e;
    SqList L;
    SqList La, Lb;
    InitList(&L);
    InitList(&La);
    InitList(&Lb);

    /* now let's test each function */
    /* make a sqlist */
    print_top_stars(32);
    printf("Now let's enter some thing to the sqlist.\n");
    printf("How many elements do you want to input? \n");
    scanf("%d", &i);
    printf("Please enter %d values(user Enter to commit).\n", i);
    for (j = 0; j < i; ++j) {
	scanf("%d", &e);
	ListInsert(&L, j+1, e);
	if (j != i-1)
	    printf("Please enter next value:\n");
    }
    printf("Here is your sqlist:\n");
    ListTraverse(L);
    print_bot_stars(32);

    /* demo insert function */
    print_top_stars(32);
    printf("Please choose a position to insert: ");
    scanf("%d", &i);
    while (i < 1 || i > L.length) {
	printf("Warning: wrong position\n");
	scanf("%d", &i);
    };
    printf("Enter the instert value: ");
    scanf("%d", &e);
    ListInsert(&L, i, e);
    printf("Now the length of L is %d.\n", L.length);
    printf("The content of sqlist are: \n");
    ListTraverse(L);
    print_bot_stars(32);

    /* demo delete function */
    print_top_stars(32);
    printf("Please choose a position to delete: \n");
    scanf("%d", &i);
    while (i < 1 || i > L.length) {
	printf("Warning: wrong position\n");
	scanf("%d", &i);
    }
    ListDelete(&L, i, &e);
    printf("Now the length of L is %d.\n", L.length);
    printf("The content of sqlist are: \n");
    ListTraverse(L);
    print_bot_stars(32);

    /* demo locate function */
    print_top_stars(32);
    printf("This check if the value you enter in the sqlist,\n");
    printf("if in the sqlist return the position.\n");
    printf("Enter the value: \n");
    scanf("%d", &e);
    if (LocateElem(L, e) != 0) {
	printf("The position of %d is %d.\n", e, LocateElem(L, e));
    } else {
	printf("The value you enter is not in the sqlist.\n");
    }
    print_bot_stars(32);

    /* demo union sqlist */
    print_top_stars(32);
    printf("This test will union two sqlist, ");
    printf("now let's make another list.\n");
    La = L;
    printf("How many values do you want in it?\n");
    scanf("%d", &i);
    printf("Please enter %d values(user Enter to commit).\n", i);
    for (j = 0; j < i; j++) {
	scanf("%d", &e);
	ListInsert(&Lb, j+1, e);
	if (j != i - 1)
	    printf("Please enter next value:\n");
    }
    printf("Now the length of Lb is %d.\n", Lb.length);
    printf("The content of sqlist are: \n");
    ListTraverse(Lb);
    printf("Union Two sqlist now:\n");
    unionL(&La, Lb);
    ListTraverse(La);
    
    return 0;
}