实验二、1基本线性表的基本运算

来源:互联网 发布:我国酸雨的ph数据 编辑:程序博客网 时间:2024/06/09 19:24
昨天写的 用的是DEVC++
1、创建基本线性表
2、求基本线性表的长度
3、在表中查找某个元素
4、在某个位置插入新的元素
5、在表中删除某个元素
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node
{
    ElemType date;
    struct node *next;   
}Lnode;
Lnode *head;
int length(Lnode *p)
{
    int n=0;
    Lnode *q=p;
    while(q!=NULL)
    {
        n++;
        q=q->next;   
    }
    return n;
}
ElemType get(Lnode*p,int i)
{
    int j=1;
    Lnode*q=p;
    while(j<i&&q!=NULL)
    {
        q=q->next;
        j++;   
    }   
    if(q!=NULL)
    return (q->date);
    else
    printf("参数i不对!/n");
}
int loate(Lnode*p,ElemType x)
{
 int n=0;
    Lnode*q=p;
    while(q->date!=x&&q!=NULL) 
 {
  n++;
  q=q->next; 
 } 
    if(q==NULL)
    return -1;
    else
    return n+1;
}
void insert(ElemType x,int i)
{
 int j=1;
 Lnode *q,*s;
 s=(Lnode*)malloc(sizeof(Lnode));
 s->date=x;
 q=head;
 if(i==1)
 {
  s->next=q;
  head=s; 
  
 }
 else
 {
  while(j<i-1&&q!=NULL)
  {
   q=q->next;
   j++; 
  }
  if(j==i-1)
  {
   s->next=q->next;
   q->next=s; 
  }
  else
  printf("参数 i 不对!");
 }
}
void dele(Lnode*p,int i)
{
 int j=1;
 Lnode *q=p,*t;
 if(i==1)
 {
  t=q;
  p=q->next; 
 }
 else
 {
  while(j<i-1&&q!=NULL)
  {
   q=q->next;
   j++; 
  }
 if(q->next!=NULL&&j==i-1)
 {
  t=q->next;
  q->next=t->next; 
 }
 else
 printf("参数i不正确!");
 }
 free(t);
}
void display(Lnode*p)
{
 Lnode*q;
 q=p;
 printf("单链表显示:");
 if(q==NULL)
  printf("链表为空!");
 else if(q->next==NULL)
  printf("%d/n",q->date);
 else
 {
  while(q->next!=NULL)
  {
   printf("%d  ",q->date);
   q=q->next; 
  }
  printf("%d",q->date);
 }
 //printf("%d",p->date);
}
int main()
{
 Lnode *q;
 int d,i,n,select,k,flag=1;
 head=NULL;
 printf("请输入数据的长度:");
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  printf("将数据插入到链表中:");
  scanf("%d",&d);
  insert(d,i); 
 }
 display(head);
 printf("/n");
 while(flag)
 {
  printf("1。。。。。求长度。。。。/n");
  printf("2。。。。。取结点。。。。/n");
  printf("3。。。。。求值查找。。。/n");
  printf("4。。。。。增加结点。。。/n");
  printf("5。。。。。删除结点。。。/n");
  printf("6。。。。。退出。。。。。/n");
  printf("please input your select:");
  scanf("%d",&select);
  switch(select)
  {
   case 1:
    {
     d=length(head);
     printf("out the length:%d/n",d);
     display(head);
     printf("/n");
    }
    break;
   case 2:
    {
     printf("please input the loate: ");
     scanf("%d",&d);
     k=get(head,d);
     printf("您查找的数据是:%d/n",k);
     display(head);
     printf("/n");
    }
    break;
   case 3:
    {
     printf("please input the date:");
     scanf("%d",&d);
     k=loate(head,d);
     printf("数据的位置是:%d/n",k);
     display(head);
     printf("/n");  
    }
    break;  
   case 4:
    {
     printf("please input the date:");
     scanf("%d",&d);
     printf("please input the loate:");
     scanf("%d",&k);
     insert(d,k);
     display(head);
     printf("/n");  
    }
    break;
   case 5:
    {
     printf("please input the loate:");
     scanf("%d",&k);
     dele(head,k);
     display(head);
     printf("/n");  
    }
    break;
   case 6:flag=-1;
     break;
  }
 } 
}
原创粉丝点击