1、数据结构
线性表
#include
2、 { int *elem; int length; int listsize; }SqList; Status 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; return OK; } Status ListInsert(SqList *L,int i,in
3、t e) { int *newbase,*q,*p; if(i<1||i>L->length+1) return ERROR; if(L->length>=L->listsize) { if(!(newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType)))) exit(OVERFLOW); L->elem=newbase; L->listsize+=LISTINCREMENT; }
4、 q=L->elem+i-1; for(p=L->elem+L->length-1;p>=q;--p) *(p+1)=*p; *q=e; ++L->length; return OK; } Status ListPrint(SqList *L) { int *q; int i; q=L->elem; for(i=1;i<=L->length;i++) printf("%d ",*q++); printf("\n"); return OK; } Status ListDel
5、ete(SqList *L,int i,ElemType *e) { ElemType *p,*q; if(i<1||i>L->length) // i值不合法 return ERROR; p=L->elem+i-1; *e=*p; q=L->elem+L->length-1; for(++p;p<=q;++p)移 *(p-1)=*p; L->length--; return OK; } Status GetElem(SqList *L,int i,ElemType *e) { if(i<
6、1||i>L->length) exit(ERROR); *e=*(L->elem+i-1); return OK; } int menu() {int n; printf("put number"); scanf("%d",&n);return n; } void main() { SqList l,La,Lb,Lc; int i; int e; printf ("1 InitList\n 2 listinsert\n 3 listprint\n 4 ListDelete\n 5 GetElem\n 6 MergeList\n
7、6 exit\n"); do { switch(menu()) { case 1:InitList(&l);printf("初始化!!!!!\n");break; case 2:printf("i,e");scanf("%d%d",&i,&e); ListInsert(&l,i,e);break; case 3:ListPrint(&l);break; case 4:printf("i,e");scanf("%d",&i); ListDelete(&l,i,&e);break; case 5:printf("i");scanf("%d",&i
8、);
GetElem(&l,i,&e);printf("%d\n",e);break;
case 6:exit(0); }}
while(1); }
======================================================================
单链表
#include
9、fine ERROR 0 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等 typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE typedef struct LNode { int data; struct LNode *next; }LNode,*LinkList; typedef int Status; //-------------------------------------------------------------------------
10、 void CreateList(LinkList *L,int n) { int i; LNode *p; *L=(LinkList)malloc(sizeof(LNode)); (*L)->next=NULL; for(i=n;i>0;--i) {p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data); p->next=(*L)->next; (*L)->next=p;} } //-------------------------------------------------------------
11、
Status ListInsert(LinkList *L,int i,int e)
{
int j;
LinkList p,s;
p=*L;j=0;
while(p&&j
12、 void ListPrint(LinkList *L) {LinkList p; p=(*L)->next; printf("%d",p->data); while(p->next) { p=p->next; printf("%3d",p->data); } } //---------------------------------------------------------------------------- Status ListDelete(LinkList *L,int i,int *e
13、)
{LinkList p,q;
int j;
p=*L;j=0;
while(p->next&&j
14、int *e) { LinkList p; int j; p=(*L)->next;j=1; while(p&&jnext;++j;} if(!p||j>i) return ERROR; *e=p->data; return OK; } //--------------------------------------------------------------------------- int Menu() {int a; printf("******************************\n"); printf("*
15、1->CreateList *\n"); printf("* 2->ListInsert *\n"); printf("* 3->Listprint *\n"); printf("* 4->ListDelete *\n"); printf("* 5->GetElem *\n"); printf("* 6->exit *\n"); printf("******************************\n");
16、 do {printf("Enter You selelt:"); scanf("%d",&a); }while(!(a>=1&&a<=7)); return(a); } main() { LinkList l,La,Lb,Lc; int x,i,e,n,result,flag=0; do { x=Menu(); switch(x) {case 1: printf("Enter n :"); scanf("%d",&n); CreateList(&l,n); flag=1; printf("su
17、ccess!print Enter continue...\n"); break; case 2:if(flag==0) {printf("please enter 1! zai shu 2!"); break; } printf("\n please input i and e:"); scanf("%d %d",&i,&e); result=ListInsert(&l,i,e); if(result==ERROR) printf("Enter i is Erroe!please Enter c
18、ontime...\n"); else printf("Indent Success complered\n!"); break; case 3:printf("ListPrint:"); ListPrint(&l); printf("\n!please Entrer contime...."); break; case 4: printf("Enter i :"); scanf("%d",&i); result=ListDelete(&l,i,&e); if(resul
19、t==ERROR) printf("Enter i is Error! please Enter cintime...\n"); else printf("Indent Succes complered: %d\n",e); break; case 5: printf("Enter i :"); scanf("%d",&i); GetElem(&l,i,&e); printf("Succes is i :%d\n",e); break; case 6: printf("\n");x=0;break;
20、 }
}while(x!=0);
}
======================================================================
栈
#include
21、NIT_SIZE 100 #define STACKINCREMENT 10 typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等 typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE typedef int SElemType; typedef struct { int *base; int *top; int stacksize; }SqStack; //---------------------------------------
22、 Status InitStack(SqStack *S) {S->base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top=S->base; S->stacksize=STACK_INIT_SIZE; return OK; } //----------------------------------------------------------- Status Push(
23、SqStack *S,SElemType e) { if(S->top-S->base>=S->stacksize) {S->base=(SElemType *) realloc(S->base,(S->stacksize+STACKINCREMENT) *sizeof(SElemType)); if(!S->base) exit(OVERFLOW); S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *S->top++=e; return OK; } //
24、 int Menu() {int x; printf("enter your choice:"); scanf("%d",&x); return x; } //--------------------------------------------------------- void StackPrint(SqStack S) {SElemType *p; p=S.top; printf("打印---:"); w
25、hile(p!=S.base) {printf("%d\t",*--p); } } //----------------------------------------------------------- Status Pop(SqStack *S,SElemType *e) { if(S->top==S->base) return ERROR; *e=*--S->top; return OK; } //---------------------------------------------------------- Status Get
26、Top(SqStack S, SElemType *e) { if(S.top==S.base) return ERROR; *e=*(S.top-1); return OK; } //---------------------------------------------------------- main() {int e,n=0; SqStack s; char kuohao[100]; printf("------------------------------------------------\n"); printf("\t\t
27、1:InitStack\t\t\n"); printf("\t\t2:Push\t\t\t\n"); printf("\t\t3:Print\t\t\t\n"); printf("\t\t4:GetTop\t\t\n"); printf("\t\t5:Pop\t\t\t\n"); printf("\t\t6:Exit\t\t\t\n"); printf("-------------------------------------------------\n"); while(1) { switch(Menu())
28、 { case 1:printf("栈建立成功!!!!!");printf("\n"); InitStack(&s);printf("\n");break; case 2:printf("输入压入栈顶的元素:");scanf("%d",&e);printf("\n"); Push(&s,e);printf("\n");break; case 3:StackPrint(s);printf("\n");break; case 4:printf("打印站顶元素------值为%d",GetTop(s,&n));
29、 break;
case 5:Pop(&s,&n);
printf("弹出站顶元素------值为%d",n);
break;
case 6:exit(0); }
};
}
======================================================================
队列
#include
30、F6),NULL
#include
31、{ QueuePtr front; QueuePtr rear; }LinkQueue; //---------------------------------------------------------------- Status InitQueue(LinkQueue *Q) { Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q->front) exit (OVERFLOW); Q->front->next=NULL; return OK; } //---------
32、 Status DestroyQueue(LinkQueue *Q) {while(Q->front) { Q->rear=Q->front->next; free(Q->front); Q->front=Q->rear; } return OK;} //----------------------------------------------------------------- Status EnQueue(LinkQueue *Q, SElemType
33、 e) { QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit (OVERFLOW); p->data=e;p->next=NULL; Q->rear->next=p; Q->rear=p; return OK; } //---------------------------------------------------------------- void QueuePrint( LinkQueue *Q ) { /*QueuePtr p; if(Q.rear==Q.front) exit(0)
34、 while(Q.rear!=Q.front) { p=Q.front->next; printf("%d ",p->d
35、ata); Q.front=p;}*/ QueuePtr p; p=Q->front; while(Q->rear!=p) { p=p->next; printf("%d ",p->data);} } //---------------------------------------------------------------- Status DeQueue(LinkQueue *Q, SElemType *e) { QueuePtr p; if(Q->front==Q->rear) return ERROR; {p=Q->front->next; *e
36、p->data; Q->front->next=p->next;} if(Q->rear==p) Q->rear=Q->front; free(p); return OK; } //--------------------------------------------------------------- int menu() {int n; printf("put number"); scanf("%d",&n);return n; } void main() { int n; LinkQueue Q; SElemType e; printf
37、 (" 1 InitQueue\n 2 DestroyQueue\n 3 EnQueue\n 4 DeQueue\n 5 StackPrint\n 6 exit\n"); do{ n=menu(); switch(n) { case 1:if(InitQueue(&Q))printf("初始化!!!");else printf("ERROR");printf("\n");break; case 2:if(DestroyQueue(&Q))printf("OK"); else printf("ERROR");printf("\n");break; case 3:printf("enter e:");scanf("%d",&e);if(EnQueue(&Q, e))printf("OK");else printf("EROR");printf("\n");break; case 4:if(DeQueue( &Q, &e))printf("%d",e);else printf("ERROR");printf("\n");break; case 5:QueuePrint(&Q);printf("\n");break; case 6:exit(0); } } while(1); }
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818