链表
来源:互联网 发布:7.1声道耳机推荐 知乎 编辑:程序博客网 时间:2024/05/16 06:22
题目:设计算法将一个线性链表逆置,即将表(a1, a2, ……, an)逆置为(an, ……, a2, a1),要求逆置后的链表仍占用原来的存储空间。
#include <stdio.h>#include <malloc.h>typedef struct node{ char data; struct node * next;}LinkList;//建立空表LinkList * initList(){ LinkList * head; LinkList * p = (LinkList *)malloc(sizeof(LinkList)); p->next = NULL; head = p; return head;}//置表空void setListNull(LinkList * L){ LinkList * p = L->next; while (p != NULL) { // Delete(p); }}//求表长int ListLength(LinkList * L){ int i = 0; LinkList * p = L->next; while(p != NULL) { i++; p = p->next; } return i;}//按序号取元素char get(LinkList * L, int n){ if (n < 1 || n > ListLength(L)) { printf("error:get"); return 0; } int i = 0; LinkList * p = L->next; while(p != NULL && i != n -1) { i++; p = p->next; } return p->data;}//修改结点中的数据void set(LinkList * L, int n, char ch){ if (n < 1 || n > ListLength(L)) { printf("error:set"); return ; } int i = 0; LinkList * p = L->next; while(p != NULL && i != n -1) { i++; p = p->next; } p->data = ch;}//按值查找int ListLocate(LinkList * L, char ch){ LinkList * p = L->next; int i = 1; while (p != NULL) { if (p->data == ch) return i; p = p->next; i++; } printf("error:ListLocate"); return 0;}//插入void insert(LinkList * L, int n, char ch){ LinkList * p = L; LinkList * s = (LinkList *)malloc(sizeof(LinkList)); s->data = ch; int i = 0; while(p->next != NULL) { if (i == n-1) break; p = p->next; i++; } s->next = p->next; p->next = s;}//删除void Delete(LinkList * L, int n){ int i = 0; LinkList * p = L; while (p->next != NULL) { if (i == n -1) { break; } p = p->next; i++; } LinkList * q = p->next; p->next = q->next; free(q);}void print(LinkList * L){ LinkList * p = L->next; while(p != NULL) { printf("%c ", p->data); p = p->next; } printf("\n");}//逆置void ListInverse(LinkList * L){ int i, j; LinkList * temp = (LinkList *)malloc(sizeof(LinkList)); for (i = 0, j = ListLength(L); i < j; i++, j--) { temp->data = get(L, i+1); set(L, i+1, get(L, ListLength(L) - i)); set(L, ListLength(L) - i, temp->data); }}int main(void){ LinkList * L = initList(); LinkList * S = initList(); int i; char ch = 'A'; for (i = 1; i <= 26; ++i, ch++) { insert(L, i, ch); } print(L); printf("第5个元素是:%c\n", get(L, 5)); printf("第26个元素是:%c\n", get(L, 26)); printf("第1个元素是:%c\n", get(L, 1)); printf("A在链表中的位置为:%d\n", ListLocate(L, 'A')); printf("Z在链表中的位置为:%d\n", ListLocate(L, 'Z')); Delete(L, 1); //A Delete(L, 25); //Z print(L); printf("此时链表的长度为:%d\n", ListLength(L)); //逆置 ListInverse(L); print(L); ch = '1'; for(i = 1; i <= 5; ++i, ch++) { insert(S, i, ch); } print(S); ListInverse(S); print(S); return 0;}
0 0
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- FastCGI协议分析
- matlab学习计划11.4
- 获取系统时间及将时间戳转化为时间
- 51nod 1445 变色DNA
- MySQL之——MySQL Cluster集群搭建详解(基于手动编译安装包)
- 链表
- 欢迎使用CSDN-markdown编辑器
- 第十三章:方法 第十四章:构造与析构 第十五章:类继承(322)
- 课程CS229之MATLAB笔记1
- 求质数
- poj 3735 Training little cats
- nio的相关知识点
- 开发servlet的三种方法
- volatile 与 synchronized关键字详解