1、stdlib.h#define N 5#define NULL 0/链表的存储结构typedef struct LNode int data; struct LNode *next;LNode,*list;/顺序创建链表void creatList(list &l,int n) int i; list p,q; l=(list)malloc(sizeof(LNode); /开辟头结点 p=l; /指针p指向头结点 for(i=0;idata); p-next=q; /p的下一个结点指向新开辟的结点q p=q; /将p指针指向q p-next=NULL;/归并排序void mergeList(l
2、ist &la,list &lb,list &lc) /将已经排好序的la,lb中的数重新排列成有序(非递减) list pa,pb,pc; pa=la-next;pb=lb- lc=pc=la; /默认将la做为lc的头结点(lb亦可) while(pa&pb) /让pc接到数据小的结点上,直到pa,pb两者有一指向空结点 if(pa-datadata) pc-next=pa;pc=pa;pa=pa- elsenext=pb;pc=pb;pb=pb- pc-next=pa?pa:pb; /如果最后la有剩余结点,即将其直接加入到lc中,反之将lb的剩余结点加到lc中 free(lb); vo
3、id printList(list l) list p; p=l- while(p) printf(%d ,p-p=p-void main() list la,lb,lc; printf(创建两个含%d个元素的链表,请输入:n,N); creatList(la,N); creatList(lb,N); mergeList(la,lb,lc); printList(lc);2. #include data=e) return OK; /发现在里面,返回真值 p=p- /否则指针后移,继续找 return ERROR; /未找到,返回假值(没有执行return OK;语句)/插入元素void in
4、sertList(list &l,int &e) list p,q,s; /q为新插入的元素开辟一个存储空间的指针,s为p前一个指针,方便插入 s=l; if(edata) /发现要插入的元素e比后面的小,开辟空间,并将e放入空间的数据域中 q=(list)malloc(sizeof(LNode); q-data=e; while(s-next!=p) s=s- /找到p前的一个指针next=p; / 画图好好理解 -s-p- s- / q- break; /输出链表 p=p- list l; int e;创建%d个元素的链表,请输入%d个元素:,N,N); creatList(l,N);请输
5、入要判断的元素:); scanf(e); if(inList(l,e) printf(YES else insertList(l,e); printList(l);3. #include =p) q=q- /找到p前一个结点,方便删除操作next=p- /删除结点p free(p); return OK; /发现在里面,返回真值请输入要判断的元素 if(!insertDeleteList(l,e)NO 4. #include =NULL) q=l- /每次比较从首结点开始 while(q- r=q- if(q-datar-data) /发现前一个比后一个大,交换数据 chang=q-data;
6、data=r-data=chang; q=q- /相邻间下一个比较 /下一轮比较 sortList(l); printList(l);5. #include /头结点也添加元素,方便输出 for(int i=1;next=l; /让最后一个p-next指针指向头结点,构成循环链表void printList(list l,int pos) for(i=1;pos-1;i+) p=p- /找到指定位置的前一个位置 q=p- do if(pos=1) printf( /如果指定位置为1,即按原样输出 else p=p- /不然,p先移到指定的位置,输出其数据 while(p-=q); /结束条件(
7、p移到的下一个位置不是q,即不是最初的p,完成循环输出) int pos;创建%d个元素的循环链表,请输入%d个元素:请指明从第几个位置输出循环链表中的元素:pos); while(posN)输入的位置不存在,请重新输入. printList(l,pos);11#include 12#include /没有执行return OK;语句,说明未找到 while(q- /找到链尾 p=(list)malloc(sizeof(LNode); /为链尾重新开辟空间 /接到链尾next=q- q- /未找到,返回假值 13#include #define Error 0#define maxSize 1
8、00/栈的存储结构typedef struct int *base; int *top; int size;stack;/栈的初始化(顺序存储)int initStack(stack &s) /开辟maxSize大小的空间,base和top都指向基地址,同时判断是否开辟成功,不成功返回0(s.base=s.top=(int*)malloc(maxSize*sizeof(int) return Error; s.size=maxSize; /栈的大小为maxSize return OK;/进栈操作int push(stack &s,int e) *s.top=e; /先将元素e赋值给s.top所指的存储空间 s.top+; /top指针上移/出栈操作int pop(stack &s,int & if(s.base=s.top) return Error; /如果栈为空,返回0 s.top-; /top指针先后移 e=*s.top; /将其所指的元素值赋给e return e; stack s; int n,e;请输入要创建栈的元素的个数:n); initStack(s); push(s,e); while(s.base!=s.top),pop(s,e);14#include #define stackincrement 8/栈的存储结
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1