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; }
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"); }
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); }
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; }
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); }
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); }
/* * 给定两个单链表,找出两个链表的公共节点 * 思路:由于每个单链表节点只有一个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; } } }
void main() { int k; SLinkList s; difference(s,k); ListTraverse(s,k,visit); }
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); }
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; }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); /* 正序输出 */ }
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; }
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; }
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; }
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; }
/* 并返回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; } } }
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); }
void SubtractPolyn(polynomail *pa, polynomail *pb) { ListTraverse(*pb, inverse); AddPolyn(pa, pb); }
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(),输出元素的值 */ }
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; }
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; }