2020.10.3

  1 #include<stdio.h>
  2 #include <stdlib.h>
  3 #include<malloc.h>
  4 #define OK 1
  5 #define ERROR 0
  6 #define ElemType int
  7 typedef int Status;
  8 typedef struct LNode
  9 {
 10     int data;
 11     struct LNode *next;
 12 }LNode,*LinkList;
 13 Status InitList(LinkList &L){
 14     L=new LNode;
 15     L->next=NULL;
 16     return OK;
 17 }
 18 void CreateList_H(LinkList &L, int n) {            //头插法创建链表,最先创建的元素为链表尾 
 19     L=new LNode;
 20     LinkList p;
 21     L->next=NULL;
 22     for(int i=0;i<n;++i){
 23         p=new LNode;
 24         scanf("%d",&p->data);
 25         p->next=L->next;
 26         L->next=p;
 27     }
 28 }
 29 void CreateList_R(LinkList &L, int n) {            
 30     L=new LNode;
 31     LinkList p,r;
 32     L->next=NULL;
 33     r=L;
 34     for(int i=0;i<n;++i){
 35         p=new LNode;
 36         scanf("%d",&p->data);
 37         p->next=NULL;
 38         r->next=p;
 39     }
 40 }
 41 Status GetElem(LinkList L,int i,ElemType &e)
 42 {
 43     LinkList p=L;
 44     p=L->next;
 45     int j=1;
 46     while(p&&j<1)
 47     {
 48         p=p->next;
 49         ++j;
 50     }
 51     if(!p||j>i) return ERROR;
 52     e=p->data;
 53     return OK;
 54 }
 55 LNode *LocateElem(LinkList L,ElemType e)
 56 {
 57     LinkList p;
 58     p=L->next;
 59     while(p&&p->data!=e)
 60         p=p->next;
 61     return p;
 62 }
 63 Status ListInsert(LinkList &L,int i,ElemType e)
 64 {
 65     LinkList p,s;
 66     p=L;
 67     int j=0;
 68     while(p&&(j<i-1))
 69     {
 70         p=p->next;
 71         ++j;
 72     }
 73     if(!p||j>j-1) return ERROR;
 74     s=new LNode;
 75     s->data=e;
 76     s->next=p->next;
 77     p->next=s;
 78     return OK;
 79 }
 80 Status ListDelete(LinkList &L,int i)
 81 {
 82     LinkList p,q;
 83     p=L;
 84     int j=0;
 85     while((p->next)&&(j<i-1))
 86     {
 87         p=p->next;
 88         ++j;
 89     }
 90     if(!(p->next)||j>i-1) return ERROR;
 91     q=p->next;
 92     p->next=q->next;
 93     delete q;
 94     return OK;
 95 }
 96 void print(LinkList &L)
 97 {
 98     LinkList p=L->next;
 99     while(p)
100    {
101      printf("%d ",p->data);
102      p=p->next;
103    }
104     printf("\n");
105 }
106 int main(){
107     LinkList list;
108     LNode s;
109     int n,m,i;
110     InitList(list);
111     printf(" 1.前插法    2.后插法\n");
112     scanf("%d",&i);
113     if(i==1)
114     {
115        printf("创建链表个数为:");
116        scanf("%d",&n);
117        printf("使用前插法创建链表为:");
118        CreateList_H(list,n);
119        print(list);
120     } 
121     if(i==2)
122     {
123        printf("创建链表个数为:");
124        scanf("%d",&n);
125        printf("使用后插法创建链表为:");
126        CreateList_R(list,n);
127        print(list);
128     }
129     ListInsert(list,3,9);
130     printf("在第3个位置插入9后链表为:");
131     print(list);
132     ListDelete(list,1);
133     printf("删除第1个结点后链表为:");
134     print(list);
135     GetElem(list,1,m);
136     printf("查询出第1个值为:%d\n",m);
137     s=*LocateElem(list,3);
138     printf("查询出值为3的结点:%d",s);
139 }

 

posted @ 2020-10-03 23:49  敲敲代代码码  阅读(148)  评论(0编辑  收藏  举报