仿写的一个简单而傻逼的程序,线性表入门。。。
希望把这几个程序弄完了,能搞出个简单的系统来O(∩_∩)O
/******************************************* 实验内容二: 1.用C语言定义线性表的链式存储结构(单链表)类型; 2.编制链式存储结构下的线性表的输入程序; 3.编制链式存储结构下线性表的插入算法程序或删除算法程序; 4.编制链式存储结构下的线性表的输出程序; 5.在链式存储结构下编制主程序:输入一个具体的线性表, 然后随意地在表中的任意位置执行插入一个元素 或删除一个元素的操作,最后输出线性表的操作结果。 ********************************************/ //线性表的链式结构(单链表类型) #include<iostream> #include<stdio.h> #include<stdlib.h> #include<malloc.h> using namespace std; #define OK 1//成功 #define ERROR 0 #define OVERFLOW 0//溢出标志或者分配失败 typedef int ElemType; typedef int Status; typedef struct LNode { ElemType data;//节点数据 LNode *next;//节点的下一个地址 }LNode,*LinkList; //初始化一个空表 Status InitList(LinkList &L) { L=new LNode;//建立新表 if(!L) exit(OVERFLOW);//存储分配失败 L->data=-1; L->next=NULL; return OK; } //输出数据************** void PrintList(LinkList L) { LinkList p; printf("你输入的数据为:"); p=L->next;//从头结点开始扫描 while(p) { printf("%d ",p->data); p=p->next; } printf("\n\n"); } //逆序输入n个数据元素,存入表中 void CreateList_L(LinkList &L,int n)//LinkList &L { int i; LinkList p; printf("逆序输入%d个数据元素:\n",n); for(i=n;i>0;i--) { p=new LNode; scanf("%d",&p->data); p->next=L->next; L->next=p; } } //删除 Status ListDelete_L(LinkList L,int i,ElemType &e) { LinkList p,q; int j; p=L ; j=0; while(p->next && j<i-1) { p=p->next;j++; } if(!(p->next) || j>i-1) return ERROR; q=p->next; p->next=q->next; e=q->data; free(q); return OK; } //插入 Status ListInsert_L(LinkList L,int i) { LinkList p,q; int j=0; p=L; while(p && j<i-1) { p=p->next;j++; } if(!(p->next) || j>i-1) return ERROR; q=new LNode; printf("请输入插入的元素:"); scanf("%d",&q->data); q->next=p->next; p->next=q; return OK; } int main() { LinkList L; ElemType e; int countinue; int n; int i; char YesOrNo; InitList(L);//初始化空表 printf("欢迎使用free斩的第一个线性链式表:\n"); do { printf("**********************请选择操作*****************************\n"); printf("******* 1.输入顺序表 *******\n"); printf("******* 2.删除顺序表中任一元素 *******\n"); printf("******* 3.在顺序表中插入任一元素 *******\n"); printf("******* 4.输出顺序表 *******\n"); printf("******* 5.退出 *******\n"); int _select=0; countinue=1; scanf("%d",&_select); switch(_select) { case 1: printf("请输入链表中元素个数:"); scanf("%d",&n); CreateList_L(L,n); printf("逆序输出你输入的链表:"); PrintList(L); printf("是否退出程序(Y/N)?\n"); scanf("%s",&YesOrNo); if(YesOrNo=='Y' || YesOrNo=='y') countinue=0; break; case 2: printf("请输入你要删除的元素位置:"); scanf("%d",&i); ListDelete_L(L,i,e); PrintList(L); printf("是否退出程序(Y/N)?\n"); scanf("%s",&YesOrNo); if(YesOrNo=='Y' || YesOrNo=='y') countinue=0; break; case 3: printf("请输入你要插入元素的位置:"); scanf("%d",&i); ListInsert_L(L,i); PrintList(L); printf("是否退出程序(Y/N)?\n"); scanf("%s",&YesOrNo); if(YesOrNo=='Y' || YesOrNo=='y') countinue=0; break; case 4:PrintList(L); printf("是否退出程序(Y/N)?\n"); scanf("%s",&YesOrNo); if(YesOrNo=='Y' || YesOrNo=='y') countinue=0; break; case 5:printf("感谢您的使用!!!\n"); printf("writer LYH\n"); countinue=0; } }while(countinue); return 0; }