偶写了一个程序,它的功能是将链表、堆栈、和队列进行集合操作,可以处理一般的插入N个元素,删除N个元素,以及入栈出栈的问题。
--------本程序的最大的特点是能够准确的显示当前的集合操作的各个元素的状态,并且能够将队列的数据以堆栈的格式输出,同样也支持将堆栈的数据以队列的格式显示出来,报错功能也不错,程序的最后将我们开辟的所有的结点空间全部释放掉。
偶觉得,数据结构,说白了就是个哪个先进哪个先出的问题,大家觉得呢??
-----------------偶的QQ:37170732,欢迎喜欢编程的同学加我,非凡是爱好Win32和MFC的同学,大家一起来讨论哦!
-----------------------------下面是程序的代码------------------------------------------
#include <stdio.h>
#include <conio.h>
#define NULL 0
typedef int DataType;
typedef struct Node *PNode;
struct Node
{
DataType info;
PNode link;
};
struct LinkType
{
PNode base;
PNode top;
};
typedef struct LinkType *PLinkType;
PLinkType CreatePointer(void)
{ PLinkType pltype;
pltype=(PLinkType)malloc(sizeof(struct LinkType));
if(pltype== NULL) { printf("\nOut of space\n");
pltype=(PLinkType)realloc(sizeof(struct LinkType));}
pltype->base=pltype->top=NULL;
return(pltype);
}
PLinkType CreateHeadNode(PLinkType pltype)
{ PNode paque;
paque=(PNode)malloc(sizeof(struct Node));
if(paque==NULL){
printf("Out of space\n");
paque=(PNode)realloc(sizeof(struct Node));}
else if(paque!= NULL) pltype->base=pltype->top=paque;
pltype->top->link->link=NULL;
return(pltype);
}
PLinkType push_Type(PLinkType pltype,DataType n)
{ PNode p;
int j;
j=0;
printf("Input %d integer:\n",n);
while(j<n) {
pltype->top->link=(PNode)malloc(sizeof(struct Node));
if(pltype->top->link==NULL) {
printf("Out of space");
pltype->top->link=(PNode)realloc(sizeof(struct Node));}
else { while(pltype->top->link!=NULL){
pltype->top->link->link=NULL;
pltype->top=pltype->top->link;
scanf("%d",&pltype->top->info);
j++;}}}
return(pltype);
}
PLinkType print_Type(PLinkType pltype)
{ PNode temp;
temp=pltype->base;
if(temp!=pltype->top){
printf("\n");
while(temp!=pltype->top) {
printf("%d\t",temp->link->info);
temp=temp->link;}}
else printf("empty");
return(pltype);
}
PLinkType pop_Type(PLinkType pltype)
{
while(pltype->base!=pltype->top) {
printf("%d\t",pltype->base->info);
pltype->base=pltype->base->link;}
return(pltype);
}
PLinkType de_Type(PLinkType pltype, DataType j)
{int i;
i=0;
if(pltype->base!=pltype->top){
printf("The pop type list is:\n");
while(pltype->base!=pltype->top &&i<j){
printf("%d\t",pltype->base->link->info);
pltype->base=pltype->base->link;
i++;}
printf("\n%d number(s) has been detyped",i);}
if(pltype->base==pltype->top){
printf("\nAll the type have been detyped");}
return(pltype);
}
PLinkType pop_Stack(PLinkType pltype,DataType j)
{PNode temp;
int i;
i=0;
if(pltype->top!=pltype->base){
printf("The pop stack is:\n");
while(pltype->top!=pltype->base &&i<j){
temp=pltype->base;
if(temp->link!=pltype->top){
while(temp->link != pltype->top) temp=temp->link;
pltype->top->link=pltype->top;
pltype->top=temp;
printf("%d\t",pltype->top->link->info);
i++;}
else{pltype->top->link=pltype->top;
pltype->top=temp;
printf("%d\t",pltype->top->link->info);
i++;}}
printf("\n%d number(s) have been poped\n",i);
return(pltype);}
return(pltype);
}
PLinkType free_all(PLinkType pltype)
{PNode temp;
while(pltype->base!=pltype->top){
temp=pltype->top;
pltype->base=pltype->base->link;
free(temp);}
free(pltype->base);
free(pltype);
printf("All the Nodes and pointer have been freed\n");
}
void main()
{ PLinkType pltype;
PNode pastack;
int j1,j2,j3,j4,j5,k;
int m1,m2,m3,m4,m5,n1,n2,n3,n4,n5;
pltype=CreatePointer();
CreateHeadNode(pltype);
printf("please choose the type of data struct:\n");
printf("1:linklist, 2:linkstack,3:linkqueue,0:to exit\n");
scanf("%d",&k);
while(k!=0){
switch(k){
case 1:{printf("Input the length of linklist:\n");
scanf("%d",&m1);
while(m1<1 ){
printf("The length is illegal,please input again\n");
scanf("%d",&m1);}
push_Type(pltype,m1);
printf("The link list is");
print_Type(pltype);
printf("\nIf you want to enlist or delist,please choose\n");
printf("1: to enlist, 2: to delist, 0:to struct choose\n");
scanf("%d",&m2);
while(m2!=0){
switch(m2){
case 1:{printf("Input the length of the list\n");
scanf("%d",&m3);
while(m3<1 ){
printf("The length is illegal,please input again\n");
scanf("%d",&m3);}
push_Type(pltype,m3);
printf("The link list is:");
print_Type(pltype);} break;
case 2:{if(pltype->base==pltype->top){
printf("The link list is empty\n");}
else{
printf("please input number(s) that you want to delist:\n");
scanf("%d",&m4);
de_Type(pltype,m4);
printf("\nThe link list is:");
print_Type(pltype);}}
break;
default:printf("the number is illegal please intput again:");
break;}
printf("\nIf you want to enlist or delist,please choose\n");
printf("1: to enlist , 2: to delist: 0:to struct choose\n");
scanf("%d",&m2);}}break;
case 2:{printf("Input the length of link stack:\n");
scanf("%d",&n1);
while(n1<1 ){
printf("The length is illegal,please input again\n");
scanf("%d",&n1);}
push_Type(pltype,n1);
printf("The list stack is");
print_Type(pltype);
printf("\nIf you want to enstack or destack,please choose\n");
printf("1: to enstack, 2: to destack, 0:to struct choose\n");
scanf("%d",&n2);
while(n2!=0){
switch(n2){
case 1:{printf("Input the length of the list\n");
scanf("%d",&n3);
while(n3<1 ){
printf("The length is illegal,please input again\n");
scanf("%d",&n3);}
push_Type(pltype,n3);
printf("The list stack is:");
print_Type(pltype);} break;
case 2:{if(pltype->base==pltype->top){
printf("The list stack is empty\n");}
else{
printf("please input number(s) that y
ou want to destack:\n");
scanf("%d",&n4);
pop_Stack(pltype,n4);
printf("The list stack is:");
print_Type(pltype);}} break;
default:printf("the number is illegal please intput again:");
break;}
printf("\nIf you want to enstack or destack,please choose\n");
printf("1: to enstack , 2: to destack: 0:to struct choose\n");
scanf("%d",&n2);}}break;
case 3:{printf("Input the length of the queue\n");
scanf("%d",&j1);
while(j1<1 ){ printf("The length is illegal,please input again\n");
scanf("%d",&j1);}
push_Type(pltype,j1);
printf("The queue is");
print_Type(pltype);
printf("\nIf you want to enqueue or dequeue,please choose\n");
printf("1: to enqueue, 2: to dequeue, 0:to struct choose\n");
scanf("%d",&j2);
while(j2!=0){
switch(j2){
case 1:{printf("Input the length of the queue\n");
scanf("%d",&j3);
while(j3<1 ){
printf("The length is illegal,please input again\n");
scanf("%d",&j3);}
push_Type(pltype,j3);
printf("The list queue is:");
print_Type(pltype);}
break;
case 2:{if(pltype->base==pltype->top){
printf("The list queue is empty");}
else{
printf("please input number(s) that you want to deque:\n");
scanf("%d",&j4);
de_Type(pltype,j4);
printf("\nThe list queue is:");
print_Type(pltype);}}
break;
default:printf("the number is illegal please intput again:");
break;}
printf("\nIf you want to enqueue or dequeue,please choose\n");
printf("1: to enqueue , 2: to dequeue: 0:to struct choose\n");
scanf("%d",&j2);}}break;
default:printf("the number is illegal please input again:\n");
break;}
printf("please choose the type of data struct:\n");
printf("1:linklist, 2:linkstack,3:linkqueue,0:to exit\n");
scanf("%d",&k);}
free_all(pltype);
getch();
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |