鏈表的處理問題


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct node *head;
struct node
{
 int date;
 struct node *next;
};


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//函數聲明
void jianli();
struct node *creatlist();
void shanchu();
int del();
struct node *find();
void charu();
void insert();
void printlist();


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
void jianli()                          //建立鏈表函數
{
 head=creatlist();
}

 

 

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
struct node *creatlist()             //建立鏈表函數
{
 struct node *h,*p,*q;
 int a;
 h=(struct node *)malloc(sizeof(struct node));
 p=q=h;
 printf("\n  %%% 輸入數據建立鏈表,當輸入為數據0時停止建立鏈表 %%%  \n");
 scanf("%d",&a);
 while(a!=0)
 {
  p=(struct node *)malloc(sizeof(struct node));
  p->date=a;
  q->next=p;
  q=p;
  printf("\n  %%% 輸入數據建立鏈表 %%%  \n");
  scanf("%d",&a);
 }
 p->next=NULL;
    return h;
}

 

 

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
void shanchu()                                       //調用找節點的函數
{   int i;
 printf("***  輸入你要刪除的數據 ***\n");
 scanf("%d",&i);
 del(head,i);
}

 

 

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
int del(struct node *h,int x)
{
 struct node *p,*q;
 if(h->next==NULL)
  {printf("list is null.\n");
 return 0;
 }
 q=find(h,x);
  if(q!=NULL)
  {
   p=q->next;
   q->next=p->next;
   free(p);
   return 1;
  }
        return 0;
}


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
struct node *find(struct node *h,int x)            //查找要刪除的節點
{
 struct node *p,*q;
 p=h->next;
 q=h;
 while(p!=NULL&&p->date!=x)
 {
  q=p;
  p=p->next;
 }
 if(p==NULL)
  return NULL;
 else
  return q;
}


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
void charu()
{
 int i;
 printf("*****   輸入你要插入的數據  *****\n\n");
    scanf("%d",&i);
 insert(head,i);
}

 

//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//插入函數
void insert(struct node *h,int x)
{
 struct node *p,*q,*s;
 s=(struct node *)malloc(sizeof(struct node));
 s->date=x;
 q=h;
 p=h->next;
 while(p!=NULL&&x>p->date)
 {
  q=p;
  p=p->next;
 }
 s->next=p;
 q->next=s;
}
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&// 輸出鏈表

void printlist()
{
 struct node *p;
 p=head->next;
 printf("******   輸出鏈表  ********\n");
 while(p!=NULL)
 {
  printf(" %d ",p->date);
  p=p->next;
 }
 printf("\n");
}

 


//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//
int main()
{   int i;
    //clrscr();
 system("color 3E");
 meimu:printf("\n  *************************** \n");
 printf("  用結構處理單向鏈表  \n\n");
 printf("  @@@@@@@@@@@@  主菜單  @@@@@@@@@@@@@@@  \n");
 printf("  1: 建立鏈表  \n");
 printf("  2: 刪除節點  \n");
 printf("  3: 插入節點  \n");
 printf("  4: 輸出鏈表  \n");
 printf("  0: 退出主菜單  \n");
 printf("  輸入你要操作的選項數字 \n");
 scanf("%d",&i);
 switch(i)
 {
 case 1:jianli();break;
 case 2:shanchu();break;
 case 3:charu();break;
 case 4:printlist();break;
 case 0:exit(0);break;
 }
 goto meimu;
 return 0;
}                               


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com