偶寫了一個程序,它的功能是將鏈表、堆棧、和隊列進行集合操作,可以處理一般的插入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("
Out of space
");
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
");
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);
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("
");
while(temp!=pltype->top) {
printf("%d ",temp->link->info);
temp=temp->link;}}
else printf("empty");
return(pltype);
}
PLinkType pop_Type(PLinkType pltype)
{
while(pltype->base!=pltype->top) {
printf("%d ",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:
");
while(pltype->base!=pltype->top &&i<j){
printf("%d ",pltype->base->link->info);
pltype->base=pltype->base->link;
i++;}
printf("
%d number(s) has been detyped",i);}
if(pltype->base==pltype->top){
printf("
All 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:
");
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 ",pltype->top->link->info);
i++;}
else{pltype->top->link=pltype->top;
pltype->top=temp;
printf("%d ",pltype->top->link->info);
i++;}}
printf("
%d number(s) have been poped
",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
");
}
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:
");
printf("1:linklist, 2:linkstack,3:linkqueue,0:to exit
");
scanf("%d",&k);
while(k!=0){
switch(k){
case 1:{printf("Input the length of linklist:
");
scanf("%d",&m1);
while(m1<1 ){
printf("The length is illegal,please input again
");
scanf("%d",&m1);}
push_Type(pltype,m1);
printf("The link list is");
print_Type(pltype);
printf("
If you want to enlist or delist,please choose
");
printf("1: to enlist, 2: to delist, 0:to struct choose
");
scanf("%d",&m2);
while(m2!=0){
switch(m2){
case 1:{printf("Input the length of the list
");
scanf("%d",&m3);
while(m3<1 ){
printf("The length is illegal,please input again
");
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
");}
else{
printf("please input number(s) that you want to delist:
");
scanf("%d",&m4);
de_Type(pltype,m4);
printf("
The&n