某线性表数据元素类型为整型,以双向循环链表结构存储线性表。试编程实现:
⑴ 输入数据元素,以先进先出形式创建双向循环链表
⑵ 销毁双向循环链表
⑶ 线性表置空
⑷ 求线性表长度
⑸ 在第i个数据元素前插入新的元素
⑹ 删除元素(按指定元素序号和元素值2种方式)
⑺ 显示线性表中的全部元素
⑻ 求最大元素的值和平均值
⑼ 就地逆置双向循环链表(不允许将结点中的值互相交换)
#include<stdio.h> typedef struct Node /*åå循ç¯é¾è¡¨ç»ç¹*/ { int data; struct Node *prior,*next; }Node,*LinkList; LinkList CreateList(LinkList L,int n);/*äº§çæ°ç®ç»ç¹ä¸ºnï¼ä¸åå«å¤´ç»ç¹ï¼çåå循ç¯é¾è¡¨L*/ void ShowList(LinkList L);/*æ¾ç¤ºçº¿æ§è¡¨ä¸çå¨é¨åç´ */ void DestroyList(LinkList *L);/*æä½ç»æï¼éæ¯åå循ç¯é¾è¡¨L*/ void EmptyList(LinkList *L);/* æä½ç»æï¼å°Lé置为空表*/ int LengthList(LinkList L);/* æä½ç»æï¼æ±åå循ç¯é¾è¡¨é¿åº¦(é¿åº¦ä¸åæ¬å¤´ç»ç¹)*/ int MaxList(LinkList L);/*æ±æå¤§åç´ çå¼*/ double AverageList(LinkList L);/*å¹³åå¼*/ LinkList InsertList(LinkList L,int i);/*å¨ç¬¬iä¸ªæ°æ®åç´ åæå¥æ°çåç´ */ LinkList DeleteNumer(LinkList L,int i);/*å é¤åç´ ï¼ææå®åç´ åºå·æ¹å¼ï¼*/ LinkList DeleteElem(LinkList L,int e);/*å é¤åç´ ï¼ææå®åç´ å¼æ¹å¼ï¼*/ LinkList InvertList(LinkList L);/*å°±å°éç½®åå循ç¯é¾è¡¨ï¼ä¸å许å°ç»ç¹ä¸çå¼äºç¸äº¤æ¢ï¼*/ void SaveList(LinkList L);/*éç¨æä»¶å½¢å¼ä¿åæ°æ®*/ int main() { LinkList L=NULL; int i,k; double a=0; printf(" /t/t/tList2/n"); printf("********************************************************************************"); printf("1,Create List /t2,Clear List/n"); printf("3,Show List /t4,Print the length of List/n"); printf("5,Insert an elem before the number /t6,Delete an elem/n"); printf("7,Delete a nmber /t8,Destroy List/n"); printf("9,Invert List /t10 Max elem in List/n"); printf("11,Average in List /t12,Save in /"c://List2.dat/"/n"); printf("13,Exit/n"); printf("********************************************************************************"); while(1) { printf("Your option(end with Enter):"); scanf("%d",&k); switch(k) { case 1: printf("Input the number(how many node):"); scanf("%d",&i); L=CreateList(L,i); break; case 2: EmptyList(&L); break; case 3: ShowList(L); break; case 4: i=LengthList(L); printf("Length----%d/n",i); break; case 5: printf("You what to insert before:"); scanf("%d",&i); L=InsertList(L,i); break; case 6: printf("Input the elem you what to delete:"); scanf("%d",&i); L=DeleteElem(L,i); break; case 7: printf("Input the number you what to delete:"); scanf("%d",&i); L=DeleteNumer(L,i); break; case 8: DestroyList(&L); break; case 9: L=InvertList(L); break; case 10: i=MaxList(L); printf("Max Elem----%d/n",i); break; case 11: a=AverageList(L); printf("Average----%lf/n",a); break; case 12: SaveList(L); break; case 13: exit(0); break; default: break; } } return 0; } /*äº§çæ°ç®ç»ç¹ä¸ºnï¼ä¸åå«å¤´ç»ç¹ï¼çåå循ç¯é¾è¡¨L*/ LinkList CreateList(LinkList L,int n) { LinkList p=NULL,s=NULL; int i=0; L=(LinkList)malloc(sizeof(Node)); L->data=n; L->prior=NULL; L->next=NULL; p=L; for(i=0;i<n;i++) { s=(LinkList)malloc(sizeof(Node)); p->next=s; printf("Input elem:"); scanf("%d",&s->data); s->prior=p; s->next=NULL; p=s; } L->prior=s; p->next=L; printf("Ok,creat list(%d nodes) success!/n",n); return L; } /*æ¾ç¤ºçº¿æ§è¡¨ä¸çå¨é¨åç´ */ void ShowList(LinkList L) { LinkList p=NULL; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } if(L->next==L) /*夿æ¯å¦ä¸ºç©ºé¾è¡¨*/ { printf("Empty List!/n"); return; } p=L->next; while(p!=L) /*åå循ç¯é¾è¡¨é忡件*/ { printf("%d/n",p->data); p=p->next; } } /*æä½ç»æï¼éæ¯åå循ç¯é¾è¡¨L*/ void DestroyList(LinkList *L)/*åæ°ä¸ºå¤´ç»ç¹çå°åï¼ä¸ç¨è¿åå¼ä¹ä¼è¿åè°ç¨åçé¾è¡¨*/ { LinkList p=NULL,q=NULL; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } p=(*L)->next; while(p!=*L) { q=p->next; free(p); p=q; } free(*L); *L=NULL;/*å°Lèµå¼ä¸ºä¸ä¸ªç©ºæé*/ } /* æä½ç»æï¼å°Lé置为空表*/ void EmptyList(LinkList *L)/*åæ°ä¸ºå¤´ç»ç¹çå°åï¼ä¸ç¨è¿åå¼ä¹ä¼è¿åè°ç¨åçé¾è¡¨*/ { LinkList p=NULL,q=NULL; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } p=(*L)->next; while(p!=*L) { q=p->next; free(p); p=q; } (*L)->next=(*L);/*头ç»ç¹ç两个æéååæåèªèº«*/ (*L)->prior=(*L); } /* æä½ç»æï¼æ±åå循ç¯é¾è¡¨é¿åº¦(é¿åº¦ä¸åæ¬å¤´ç»ç¹)*/ int LengthList(LinkList L) { LinkList p=NULL; int i=0; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } p=L->next; while(p!=L) { i++; p=p->next; } return i; } /*æ±æå¤§åç´ çå¼*/ int MaxList(LinkList L) { LinkList p=NULL,q=NULL; int m=0; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } p=L->next; q=p->next; while(q!=L) { m=(p->data>=q->data)?(p->data):(q->data); p=p->next; q=p->next; } return m; } /*å¹³åå¼*/ double AverageList(LinkList L) { LinkList p=NULL; double a=0; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } p=L->next; while(p!=L) { a+=(p->data); p=p->next; } a/=LengthList(L); return a; } /*å¨ç¬¬iä¸ªæ°æ®åç´ åæå¥æ°çåç´ */ LinkList InsertList(LinkList L,int i) { LinkList p=NULL,q=NULL,s; int j=1; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } p=L->next; while(p!=L) { if(j==i)break; p=p->next; j++; } if(p==L) { printf("Error!/n"); return; } q=p->prior; s=(LinkList)malloc(sizeof(Node)); printf("Input data:"); scanf("%d",&s->data); q->next=p->prior=s; s->next=p; s->prior=q; return L; } /*å é¤åç´ ï¼ææå®åç´ åºå·æ¹å¼ï¼*/ LinkList DeleteNumer(LinkList L,int i) { LinkList p=NULL,q=NULL,s=NULL; int j=1; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } if(i==0||i>LengthList(L)) { printf("Number >LengthList or Number = 0!/n"); return L; } p=L->next; while(p!=L) { if(j==i)break; p=p->next; j++; } q=p->prior; s=p->next; q->next=s; s->prior=q; free(p); return L; } /*å é¤åç´ ï¼ææå®åç´ å¼æ¹å¼ï¼*/ LinkList DeleteElem(LinkList L,int e) { LinkList p=NULL,q=NULL,s=NULL; if(!L) /*夿æ¯å¦åå¨é¾è¡¨*/ { printf("No List!/n"); return; } p=L->next; while(p!=L) { if(p->data==e)break; p=p->next; } if(p==L) { printf("No elem in List!/n"); return L; } q=p->prior; s=p->next; q->next=s; s->prior=q; free(p); return L; } /*å°±å°éç½®åå循ç¯é¾è¡¨ï¼ä¸å许å°ç»ç¹ä¸çå¼äºç¸äº¤æ¢ï¼*/ LinkList InvertList(LinkList L) { LinkList p=NULL,q=NULL,s=NULL; p=L->next; q=p->next; while(p!=L) { s=q->next; q->next=p;/*é置两ç»ç¹*/ p->prior=q; p=q; q=s; } q->next=p; p->prior=q; return p; } /*éç¨æä»¶å½¢å¼ä¿åæ°æ®*/ void SaveList(LinkList L) { FILE *SaveList; LinkList p=NULL; p=L->next; if((SaveList=fopen("c://List2.dat","wb"))!=NULL) { while(p!=L) { fprintf(SaveList,"%d", p->data); p=p->next; } } else printf("File error!"); fclose(SaveList); printf("Save the files successfully!/n"); }