用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串
来源:互联网 发布:access向表中加数据 编辑:程序博客网 时间:2024/06/06 20:13
[问题描述]
用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。
[输入]
初始字符串,插入位置,插入字符,删除字符。
[输出]
已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。
[存储结构]
采用链式存储结构
[算法的基本思想]
建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。
#define NULL 0typedef struct node{char a;struct node *link;}node,*nodelink;void readlink(nodelink head){nodelink p,q;char c;p=head;printf("Input a linktable(a string):");scanf("%c",&c);if (c=='\n') printf("This string is empty。");while(c!='\n'){q=(nodelink)malloc(sizeof(node));q->a=c;p->link=q;p=q;scanf("%c",&c); }p->link=NULL;}void writelink(nodelink head){nodelink q;if (head->link==NULL) printf(" This link is empty。\n");for(q=head->link;q;q=q->link)printf("%c",q->a);printf("\n");}int insert(nodelink head,char k1,char k2){//在字符k1之后插入k2; nodelink p,q;p=head->link;while(p->a!=k1&&p)p=p->link;if(p){q=(nodelink)malloc(sizeof(node));q->a=k2;q->link=p->link;p->link=q;return 1; }else {printf("There is no %c\n",k1);return 0; }}int delete(nodelink head,char k){nodelink p,q;q=head;p=head->link;while(((p->a)!=k)&&p){q=q->link;p=p->link; }if(p){q->link=p->link;return 1;}else{printf("There is no %c\n",k);return 0; }}void opside(nodelink head){nodelink p,q;p=head->link;while(p->link){q=p->link;p->link=q->link;q->link=head->link;head->link=q; }}main(){char k1,k2,k3;nodelink head;head=(nodelink)malloc(sizeof(node));head->link=NULL;readlink(head);if (head->link!=NULL){ printf("Build link is :");writelink(head); }if (head->link!=NULL){printf("Please input a char you want to insert after:");k1=getch();printf("%c\n",k1);printf("Please input a char you want to insert:");k2=getch();printf("%c\n",k2);if (insert(head,k1,k2)) {printf("After %c insert %c,link is:",k1,k2);writelink(head);}printf("Please input a char you want to delete:");k3=getch();printf("%c\n",k3);if (delete(head,k3)){ printf("after delete %c,link is:",k3); writelink(head);}if (head->link!=NULL){printf("Opsite result is :");opside(head);writelink(head);free(head);}}}
阅读全文
1 0
- 用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- 两种字符串逆序方式
- String字符串逆序输出的两种方式
- 删除字符串最后一个字符问题
- 删除字符串最后一个字符的方法
- 删除字符串的最后一个字符
- 删除字符串中最后一个字符
- PHP删除字符串最后一个字符
- javascript删除字符串最后一个字符
- javascript删除字符串最后一个字符
- javascript删除字符串最后一个字符
- 删除字符串最后一个字符的几种方法
- 删除字符串最后一个字符的几种方法
- 删除字符串最后一个字符的几种方法
- C#删除字符串最后一个字符的几种方法
- JS 删除字符串最后一个字符的几种方法
- pyhton进阶之多线程的同步执行
- 从键盘输入信息并显示
- Java并发之阻塞队列
- 累加 累乘 九九乘法 最大公约数
- 小结 | 复杂单链表的复制
- 用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串
- LeetCode----- 26. Remove Duplicates from Sorted Array
- 创建字体信息设置界面
- Windows10怎么打开通知区域始终显示所有图标
- 错题集
- spring Aop小结
- 字符串CryptoJS前台加密,pycrypto后台解密(备份一下)
- Palindromes(递归)
- YTU.3189 一个菱形