论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

偶写的链表、堆栈、队列的集合操作

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:27

偶写了一个程序,它的功能是将链表、堆栈、和队列进行集合操作,可以处理一般的插入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();
}

视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058