赞
踩
1.建立单链表,并在单链表上实现插入、删除和查找操作(验证性内容)
2.具有良好的操作、交互功能。
编程实现如下功能:
(1)根据输入单链表的长度n和各个数据元素值(整数),用头插法(或尾插法)建立单链表,并输出单链表中各元素值,观察输入的内容与输出的内容是否一致。
(2)在单链表的第i个元素之前插入一个值为x的元素,并输出插入后的单链表中各元素值。
(3)删除单链表中第i个元素,并输出删除后的单链表中各元素值。
(4)在单链表中查找第i个元素,如果查找成功,则显示该元素的值,否则显示该元素不存在。
编译环境vc++6.0
#include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef int ElemType; typedef struct Node{ ElemType data; struct Node *next; }Node,*LinkList; //对表进行开辟空间 Status ListInit(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; return OK; } //对表进行输出 Status Traverse_LinkList(LinkList L) { LinkList p; p=L->next; if(!p) {printf("表不存在:\n"); return 0; } while(p) {printf(" %d ",p->data); p=p->next; } printf("\n"); return 0; } //头插法 void CreateList(LinkList *L,int n) { int i; Node *p; *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; for(i=n;i>0;i--) { p=(LinkList)malloc(sizeof(Node)); printf("No.%d :",i); scanf("%d",&p->data); p->next=(*L)->next; (*L)->next=p; } } //在单链表L中第i个位置插入e Status Tnsert_LinkList(LinkList *L,int i,ElemType e) { Node *p,*s; int j=0; p=*L; while(p!=NULL&&j<i-1) { //找到i-1个结点 p=p->next; j++; } if(j!=i-1) return FALSE;//未找到插入位置,出错处理 s=(LinkList)malloc(sizeof(Node));//生成新结点 s->data=e; s->next=p->next;//插入新结点 p->next=s; return TRUE; } //删除 Status Delete_LinkList(LinkList *L,int i,ElemType *e) { Node *p,*r; int j=0; p=*L; while(p->next!=NULL&&j<i-1) { p=p->next; j++; } if(j!=i-1) return FALSE; r=p->next; p->next=p->next->next; *e=r->data; free(r); return TRUE; } //获取元素 Status GetElem_LinkList(LinkList L,int i,int *e) { Node *p; p=L->next; int j=1; while(p!=NULL&&j<i) { p=p->next; j++; } if(p==NULL||j>i) return -1; *e=p->data; return OK; } //按值查找元素 Status LocateElem_Link(LinkList L,ElemType e) { int i=0; while(L->data!=e){ L=L->next; i++; } return i; } void main() {LinkList La; int i,key=1,n,e; ElemType e1; ListInit(&La); while(key) {printf("\n\n\t ===LinkList option ===\n"); printf("\t 1===Initialization LinkList===\n"); //创建表 printf("\t 2=== Insert element ===\n"); //插入元素 printf("\t 3===Delete element in position i===\n");//删除元素 printf("\t 4===Get element i ===\n"); // 获取 i 元素位置的值 printf("\t 5===LocateElem element\n"); // 按照值进行查找元素位置 printf("\t 6===Traverse LinkList===\n"); //遍历 printf("\t 0===Exit===\n"); //退出 printf("\n\tplease input your chose (0-15) "); scanf("%d",&key); if(key>=0&&key<=6) switch(key) { case 1: system("cls"); ListInit(&La); printf("\t element number:"); scanf("%d",&n); CreateList(&La,n); Traverse_LinkList(La); break; case 2:system("cls"); printf("\t position && value:"); scanf("%d%d",&i,&e); Tnsert_LinkList(&La,i,e); Traverse_LinkList(La); break; case 3:system("cls"); printf("\t element position:"); scanf("%d",&i); Delete_LinkList(&La,i,&e); printf("delete %dth element %d\n",i,e); Traverse_LinkList(La); break; case 4:system("cls"); printf("\t position :"); scanf("%d",&i); GetElem_LinkList(La,i,&e); printf("%d position value :%d\n",i,e); Traverse_LinkList(La); break; case 5:system("cls"); printf("\t element value:"); scanf("%d",&e); i=LocateElem_Link(La,e); if(!i) printf(" 元素查%d找失败、\n",e); else {printf("元素%d查找成功\n",e); printf("value=%d elem position :%d\n",e,i); } Traverse_LinkList(La); break; case 6:system("cls"); Traverse_LinkList(La); break; case 0:printf("by by"); break; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。