C语言 数据结构 线性表的顺序表示
2008-04-28 20:22
761 查看
已经大三下学期了,不准备考研,但是想把考研的相关专业课程复习复习,这段时间看看数据结构,看到第一章的线性表了,想到编一个程序实现一下子线性表的顺序实现。本来刚开始想用c++的,后来想数据结构的书是c语言的版本,还是用turbo c做环境,这样更富有挑战。好啦,废话少说,把代码和大家分享把。
如果代码中有什么错误希望您不吝赐教,有什么问题发送到我的邮箱:yijiyong100@163.com我会尽快回复的!
如果代码中有什么错误希望您不吝赐教,有什么问题发送到我的邮箱:yijiyong100@163.com我会尽快回复的!
C语言 数据结构 线性表的顺序表示
/****************************************/ /*Desciption:Sequence List*/ /*Email:yijiyong100@163.com*/ /*Author:yi_landry Haerbin Normal University Computer Science*/ /*Date:2008-4-26*/ /*Copyright:HNU2008.cop*/ /*Environment:turbo c 2.01 English Version*/ /****************************************/ # include<stdlib.h> # include<stdio.h> # define LIST_INIT_SIZE 200/*distribute the memory size of the list*/ # define LIST_INCREMENT 20/*if the memory size overfolw ,everytime add LIST_INCREMENT*/ # define OVERFLOW 0 # define OK 1 struct SqList { int * element;/*the base address of the sequece list*/ int length; /*current length*/ int listsize;/*size of the sequence list*/ }L; /****************************************/ /*Initial the list*/ /****************************************/ InitList(struct SqList * L) { L->element=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); if (! L->element) exit(OVERFLOW); L->length = 0; L->listsize = LIST_INIT_SIZE; printf("Initial the list successfuly!/n"); } /****************************************/ /*Judge the list is empty or not*/ /****************************************/ ListEmpty(struct SqList * L) { if (L->length ==0) { printf("The list is empty!/n"); } else { printf("The list is not empty!/n"); } } /****************************************/ /*Get the length of the list*/ /****************************************/ ListLength(struct SqList * L) { printf("The length of the list is %d/n",L->length); } /****************************************/ /*Destroy the list and free the memory distributed at first*/ /****************************************/ DestroyList(struct SqList *L) { free(L->element); L->length = 0; L->listsize = 0; printf("Destory the list successfully!/n"); } /****************************************/ /*Clear all the elements the list*/ /****************************************/ ClearList(struct SqList * L) { L->length = 0; printf("Clear the list successfully!/n"); } /****************************************/ /*Get the element at tbe location i */ /****************************************/ GetElement(struct SqList * L,int i) { int * p = L->element +i-1; printf("The element of Location %d is %d/n",i,(*p)); } /****************************************/ /*Find a number if or not in the list*/ /****************************************/ FindElement(struct SqList * L,int elm) { int *p,*q; int totalfind=0; for (p=L->element;p<=L->element+L->length-1;p++) { if ((*p)==elm) { printf("We can find %d in the list at of the location of %d/n",elm,p-L->element+1); totalfind++; } } if (totalfind==0) { printf("We can not find %d in the list!/n",elm); } else { printf("We totally find %d <%d> in the list/n",totalfind,elm); } } /****************************************/ /*Get prior element of some element in the list*/ /****************************************/ PriorElement(struct SqList * L,int elm) { int *p; int totalPrior=0; for (p = L->element+1;p<= L->element + L->length-1;p++) { if ((*p) == elm) { printf("The prior of %d is %d/n",elm,*(p-1)); totalPrior++; } } if (totalPrior ==0) { printf("We can not find the prior of %d in the list!/n",elm); } } /****************************************/ /*Get next element of some element in the list*/ /****************************************/ NextElement(struct SqList * L,int elm) { int *p; int totalNext=0; for (p = L->element;p<= L->element + L->length-2;p++) { if ((*p) == elm) { printf("The prior of %d is %d/n",elm,*(p+1)); totalNext++; } } if (totalNext ==0) { printf("We can not find the next of %d in the list!/n",elm); } } /****************************************/ /*Insert a element into the list*/ /****************************************/ ListInsert(struct SqList * L,int i,int elm) { int *p,*q; if (i < 1 || i >L->length+1) { printf("The location %d you input is not valid!/n",i); } else if (L->length >= L->listsize) { int * newbase = (int *)malloc((L->listsize+LIST_INCREMENT)*sizeof(int)); if (!newbase) exit(OVERFLOW); L->element = newbase; L->listsize += LIST_INCREMENT; } else { q = L->element+i-1; /*The address of element i*/ for (p = L->element+L->length-1;p >=q;p--) *(p+1)= *p; * q = elm; L->length ++; printf("The element of %d insert into the list successfully!/n",elm); } } /****************************************/ /*Delete the element at the location i in the list*/ /****************************************/ ListDelete(struct SqList * L,int i) { int *p,*q,deletedElm; if (i<0 || i>L->length+1) { printf("The location you input you want to delete is not valid!/n"); } else { q = L->element+i; deletedElm = *(q-1); for (p =q;p<=L->element+L->length;p++) { *(p-1)=*p; } L->length--; printf("The element %d at location %d was deleted successfully!/n",deletedElm,i); } } /****************************************/ /*Print the list */ /****************************************/ PrintList(struct SqList * L) { int *p,*q; if (L->length == 0) { printf("The list now is empty!/n"); } else if (L->length == 1) { printf("The current list:/n%d",*(L->element)); } else if (L->length == 2) { printf("The current list:/n%d->%d",*(L->element),*(L->element+1)); } else if (L->length >2); { q = L->element +L->length-2; printf("The current list :/n"); for (p = L->element;p<=q;p++) { printf("%d->",*p); } printf("%d/n",*(q+1)); } } /****************************************/ /*Traverse the list*/ /****************************************/ ListTraverse(struct SqList * L) { int *i,*j,*p,temp; i = L->element; j = L->element+ L->length-1; p = i+(L->length-1)/2; for (;i<p;i++,j--) { temp = * i; * i = * j; * j = temp; } } /****************************************/ /*Show a example to the user*/ /****************************************/ ListExample() { InitList(&L); ListInsert(&L,1,1); ListInsert(&L,2,2); ListInsert(&L,3,3); ListInsert(&L,4,4); ListInsert(&L,5,5); ListInsert(&L,6,6); ListInsert(&L,5,50); ListInsert(&L,6,60); ListInsert(&L,7,7); ListInsert(&L,8,8); ListInsert(&L,9,9); FindElement(&L,6); FindElement(&L,7); FindElement(&L,10); PriorElement(&L,6); PriorElement(&L,10); GetElement(&L,3); PrintList(&L); ListTraverse(&L); PrintList(&L); ListDelete(&L,4); PrintList(&L); ListDelete(&L,6); PrintList(&L); ListInsert(&L,18,9); ListLength(&L); DestroyList(&L); ListLength(&L); return 0; } /****************************************/ /*Show the help information to the user*/ /****************************************/ void help() { printf(" /*****************************************************************//n"); printf(" /*****************************************************************//n"); printf(" /* The Sequence List Operation Version 1.0 *//n"); printf(" /* View the example information 1 *//n"); printf(" /* Insert a number into the list 2 *//n"); printf(" /* Delete a number from the list 3 *//n"); printf(" /* Find a number if or not in the list 4 *//n"); printf(" /* Get the prior of some number from the list 5 *//n"); printf(" /* Get the next of some number from the list 6 *//n"); printf(" /* Get the size of list 7 *//n"); printf(" /* Show the help information 8 *//n"); printf(" /* View current list information 9 *//n"); printf(" /* View travesre list information 10 *//n"); printf(" /* Exit Sequence List Q *//n"); printf(" /*****************************************************************//n"); } main() { char userInput; int insertItem,insertLocation,deleteLocation,findItem,priorItem,nextItem; help(); InitList(&L); while(1) { printf("Slect the operation you want to do: input the correspond number!you can enter 1 to view the example./n"); scanf("%c",&userInput); switch(userInput) { case '1':ListExample();break; case '2': for(;;) { printf("Please input a integer and the location you want to insert into the list:/n"); printf("Forexample 1 1 if you do not want to insert a number into the list again,you can input 0 0/n"); scanf("%d %d",&insertItem,&insertLocation); if (insertItem == 0 && insertLocation == 0) break; ListInsert(&L,insertLocation,insertItem); PrintList(&L); } break; case '3': for(;;) { printf("Please input the location of the element you want to delete from the list:/n"); printf("Forexample 2.if you do not want to delete a number from the list again,you can input -1/n"); scanf("%d",&deleteLocation); if ( deleteLocation== -1) break; ListDelete(&L,deleteLocation); PrintList(&L); } break; case '4': for(;;) { printf("Please input a integer you want to find from the list:/n"); printf("Forexample 1 . if you do not want to find a number from the list again,you can input -1/n"); scanf("%d",&findItem); if (findItem == -1) break; FindElement(&L,findItem); PrintList(&L); } break; case '5': for(;;) { printf("Please input a integer you want to get the prior from the list:/n"); printf("Forexample 1. if you do not want to get the prior form the list again,you can input -1/n"); scanf("%d",&priorItem); if (priorItem == -1) break; PriorElement(&L,priorItem); PrintList(&L); } break; case '6': for(;;) { printf("Please input a integer you want to get the next from the list:/n"); printf("Forexample 1. if you do not want to get the next form the list again,you can input -1/n"); scanf("%d",&nextItem); if (nextItem == -1) break; NextElement(&L,nextItem); PrintList(&L); } break; case '7':ListLength(&L);break; case '8':help();break; case '9':PrintList(&L);break; case '10':ListTraverse(&L);break; case 'Q':break; case 'q':break; } if (userInput == 'q'|| userInput == 'Q') break; } } 如果代码中有什么错误希望您不吝赐教,有什么问题发送到我的邮箱:yijiyong100@163.com我会尽快回复的!
相关文章推荐
- 数据结构1:线性表的顺序表示和实现
- C语言 数据结构 线性表 顺序表 线性表的顺序存储结构
- [C语言][数据结构]基础的线性表的顺序表示和实现
- C语言 数组的顺序表示与实现 数据结构
- 线性表的顺序表示和实现 - 数据结构
- 数据结构之线性表的顺序表示和实现
- 线性表的顺序表示和实现 - 数据结构
- 数据结构教程 第六课 线性表的顺序表示和实现
- 数据结构与算法——线性表的顺序表示
- 数据结构之:线性表的顺序表示和实现
- 数据结构之线性表(顺序表示)
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 数据结构(严蔚敏)C语言实现---线性表的顺序存储
- 数据结构——线性表的顺序表示
- 数据结构之---C语言实现图的邻接表存储表示
- [数据结构]顺序表的C语言简单实现
- 数据结构 线性表的顺序储存结构
- 线性表的顺序表示(C语言实现)
- 数据结构——顺序表(C语言实现)
- 数据结构线性表之顺序表