链串

来源:互联网 发布:美国最新非农数据直播 编辑:程序博客网 时间:2024/06/18 08:49
//生成链串与求串长、串连接运算#include <stdio.h>#include <stdlib.h>typedef struct snode{char data;struct snode *next;}LiString;                                    //链串节点类型void StrAssign(LiString **s, char str[])     //尾插法建立链串{LiString *p, *r;int i;*s = (LiString *)malloc(sizeof(LiString));//建立链串头节点r = *s;                                   //r 始终指向链串s 的尾节点for (i = 0; str[i] != '\0'; i++)          //将数组str 中的字符逐个转化为链串s 中的节点{p = (LiString *)malloc(sizeof(LiString));p->data = str[i];r->next = p;r = p;}r->next = NULL;                           //将最终生成的链串s 尾节点的指针域置空}int StrLength(LiString *s)                    //求串长{int i = 0;LiString *p = s->next;                    //使p 指向链串s 的第一个数据节点while (p != NULL){i++;p = p->next;}return i;                                 //返回串长度值}void StrCat(LiString *s, LiString *t)         //将链串s 和链串t 连接成新的链串s{LiString *p, *q, *r, *str;str = (LiString *)malloc(sizeof(LiString));r = str;                                  //r 指向链串str 的尾节点p = t->next;                              //p 指向链串t 的第一个数据节点while (p != NULL){q = (LiString *)malloc(sizeof(LiString));q->data = p->data;r->next = q;r = q;p = p->next;}r->next = NULL;                           //链串str 中尾节点的指针域置空//======================p = s;while (p->next != NULL)                   //寻找链串s 的尾节点{p = p->next;}p->next = str->next;                      //将链串str (保存着链串t 的串值)链到链串s 的尾节点之后free(str);                                //回收链串str 的头节点(忘了可不好) }int main(){LiString *head1, *head2, *p;char c1[20] = "ABCD", c2[10] = "abcd";StrAssign(&head1, c1);                    //建立链串head1StrAssign(&head2, c2);                    //建立链串head2 printf("The length of head1 is = %d\n", StrLength(head1)); //输出链串head1 的长度StrCat(head1, head2);      //将链串head1 和链串head2 连接成新的链串head1p = head1->next;                          //p 指向连接后head1 的第一个节点while (p != NULL){printf("%2c", p->data);p = p->next;}printf("\n");return 0;}