数据结构(线性表子系统:c实现)
2016-04-15 16:09
471 查看
#include<stdio.h> #include<stdlib.h>//因为使用malloc动态空间 #define N sizeof(node) // 结点定义 typedef struct linknode { char data; struct linknode * next; }node,*linklist; node *head; // 定义一个全局头指针 //建表并且输入内容,结束标记位‘# void InputList() { node *r,*s; char x; int T=1,n=0; head=(node*)malloc(N); r=head; printf("\n\t建立一个线性表"); printf("\n\t请逐个输入字符,结束标记位‘#’\n"); while(T) { printf("\t\t请输入:"); fflush(stdin);//===============为什么必须加上 scanf("%c",&x);才不会出现 ”两遍的 请输入: 请输入:“ /*清除标准输入设备(一般是键盘)的缓存。往往适用于截获输入特殊值,例如每次读取一个输入的字符, 但是如果你输完一个字符后敲了回车,回车是一个特殊的键,会产生2个字符,因此程序会认为你输入了3个字符, 此时可以用读取一个字符后用这个函数清除键盘缓存,从而清除回车的影响。*/ scanf("%c",&x); if(x!='#') { s=(node*)malloc(T); n++; s->data=x; r->next=s; s->next=NULL; r=s; } else T=0; } //printf("\n请输入所要达到第几号功能:\t"); } //输出链表中各个结点 void ShowList() { node *p; p=head->next; printf("表中内容为:\t"); while(p!=NULL) { printf("%c",p->data); p=p->next; } //printf("\n请输入所要达到第几号功能:\t"); } //查询链表中的某个元素(当“插入数据“或者“删除数据”时函数调用的函数) node *FindList_number(int i) { int j=0; node *p; p=head->next; while((p->next)!=NULL&&(j<i)) { p=p->next; j++; } if(j==i) return p; else printf("输入数据错误!!!"); } //查找链表中的某一个元素 void FindList() { char x; int i=1; node *p; printf("\t\t请输入所要查询的元素x:\t"); //x=getchar(); //getchar(); fflush(stdin); scanf("%c",&x); if(head==NULL) printf("\t该链表只有头指针!!"); if(head->next==NULL) printf("\t该线性表为空!\n"); p=head->next; while(p!=NULL&&(p->data!=x)) { p=p->next; i++; } if(p!=NULL) { printf("\t\t在链表的第 %d 位找到 x = %c \n",i,x); } else printf("\t\t在该线性表中没有找到‘X’!\n"); //printf("请输入所要达到第几号功能:\t"); } //插入一个元素,在链表中“某个元素”“之前”插入 void InsertList_befor() { char x; //int y; int i=0; node *p,*s; printf("请输入所要插入的第 i 位元素后 i=\t"); fflush(stdin); scanf("%d",&i); printf("请输入第 i 位后,所要插入的X的值X=\t"); fflush(stdin); x=getchar(); p=FindList_number(i-1); s=(node*)malloc(N); s->data=x; s->next=p->next; p->next=s; //y=s->data; //s->data=p->data; //p=s; } //求表长,求链表的长度函数 void LengthList() { int len=1; node *p; p=head->next; while(p->next!=NULL) { p=p->next; len++; } printf("该线性表的长度: len= %d \n",len); } //删除, 在该线性表链式结构中删除某个元素 void DeleteList() { node *p,*q; char x; printf("请输入所要删除的元素x: \t"); fflush(stdin); scanf("%c",&x); if(head==NULL) { printf("\t该链表的头指针为空!!!\n"); return; } if(head->next==NULL) { printf("\t该链表为空表!!!\n"); } q=head; p=head->next; while((p!=NULL)&&(p->data!=x)) { q=p; p=p->next; } if(p!=NULL) { q->next=p->next; free(p); printf("\t\t线性表中的x= %c 已被删除\n",x); } else printf("\t未找到所要删除的元素!!\n"); } int main()// 显示菜单函数 { char m; while(1) { printf(" 线性表子系统\n"); printf(" ***************************************************\n"); printf(" * 1------建 表 *\n"); printf(" * 2------插 入 *\n"); printf(" * 3------删 除 *\n"); printf(" * 4------显 示 *\n"); printf(" * 5------查 找 *\n"); printf(" * 6------求 表 长 *\n"); printf(" * 0------返 回 *\n"); printf(" ***************************************************\n"); printf(" 请输入(0-6)选项:\n"); printf("\n请输入所要达到第几号功能:\t"); fflush(stdin); scanf("%c",&m); if(m == '1') InputList(); else if(m == '2') InsertList_befor(); else if(m == '3') DeleteList(); else if(m == '4') ShowList(); else if(m == '5') FindList(); else if(m == '6') LengthList(); else if(m == '0') return 0; else{ printf("输入有误,请重新输入\n"); } } return 0; }
相关文章推荐
- 数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等 java中有封装好的类,可以直接调用。
- 数据结构——插入排序
- python 数据结构
- 数据结构--快速排序
- 【数据结构与算法】快排
- 单链表的插入和删除
- OpenCV数据结构之Mat 底层结构
- 数据结构与算法基础总结
- Linux内核hlist数据结构分析
- JavaScript数据结构之单向循环链表应用-约瑟夫问题
- IOS常用数据结构
- 数据结构算法——快速排序
- 数据结构之顺序查找
- Java使用LinkedList模拟一个堆栈或者队列数据结构。
- 哈希表学习总结
- 数据结构与算法简介
- 数据结构之二分查找(PHP)
- 数据结构--链队列基本操作
- 括号匹配
- 括号匹配