数据结构

2020-04-18 03:35

//单链表就地逆置

#define NULL 0 /*宏定义*/

typedef struct node /*定义结点类型的数据结构*/ {

char c; /*数据域,类型为字符型*/

struct node *next; /*指针域,类型为本结构体类型*/

}Node,*L; /*类型重定义,即Node和*L和struct node等价*/ main() {

L l,p,q,r; /*用指针类型定义三个结点类型的指针*/ char ch;

l=(L)malloc(sizeof(Node)); /*分配内存空间*/ l->c='\\0'; /*为头结点的数据域赋值,值为空*/ l->next=NULL; /*指明下一个结点目前不存在*/ q=l; /*q为游动指针,链表结点的连结要用*/ printf(\ scanf(\ getchar();

while(ch!='!') /*输入!表示输入结束*/ {

p=(L)malloc(sizeof(Node)); /*为新输入的数据分配内存空间*/ p->c=ch;

p->next=NULL; /*新输入的结点在链表的最后,即它的后面没有其它元素*/

q->next=p; /*q用于将上一个元素链接至当前新元素*/ q=p; /*q自己移到当前最后一个元素,以备继续链接所用*/ scanf(\ getchar(); }

q=l; /*输入整个链表前,先将q移到链表头,l一般不动*/ while(q->next!=NULL) /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/ {

printf(\表示q所指向的下一个元素的数据*/

q=q->next; /*完成该元素的输出后,q移至下一个元素重复输出操作*/ }

printf(\

//以上完成了单链表的创建 q=l->next; p=q->next; r=p->next; q->next=NULL; while(r!=NULL) {

p->next=q; q=p; p=r;

if(r->next!=NULL) //r后面还有结点,则逆置继续 r=r->next; else break; }

r->next=q;

l->next=r; //头结点指向最后一个结点

q=l; /*输入整个链表前,先将q移到链表头,l一般不动*/ while(q->next!=NULL) /*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/ {

printf(\表示q所指向的下一个元素的数据*/

q=q->next; /*完成该元素的输出后,q移至下一个元素重复输出操作*/ }

printf(\}

//约瑟夫环问题 #include #include typedef struct lnode {

int num;

struct lnode *next; }node,*L; main() {

int amount,start,circle,n,c; L p,l,q;

printf(\一共有几个人围成一圈?\\n\ scanf(\ getchar();

printf(\从第几个开始计数?\\n\ scanf(\ getchar();

printf(\每几人一次循环?\\n\ scanf(\ getchar();

l=(L)malloc(sizeof(node)); //头结点 l->next=NULL; l->num=0; q=l; n=0;

while(n++

p=(L)malloc(sizeof(node)); p->next=NULL; p->num=n; q->next=p; q=p; }

q->next=l->next; //形成循环链表 //以上完成了单向循环链表的建立 p=l->next; q=l; n=1;

while(n++

p=p->next; q=q->next; }

//退出循环时p,q分别位于指定位置

//接下去进行周期性结点删除,直到链表只余一个结点为止

n=1; //n计算被删除的结点的数量,当n=amount-1时删除结束 while(n++

c=1; //c作为循环临时变量 while(C++

p=p->next; q=q->next; }

//删除当前p指向的结点 printf(\删除结点%d\\t\ q->next=p->next; p=p->next; }

printf(\最后剩下%d\\n\}

二、栈及其操作

//All copyright are preserved bycobby /*建立堆栈*/ #include #include #define NULL 0 typedef struct node {

char ch;

struct node *next; }Snode,*stack; main() {

stack s,top,p; char ch;

s=(stack)malloc(sizeof(Snode)); s->ch='\\0';

s->next=NULL; /*建立栈底指针*/ top=s;

scanf(\ getchar();

while(ch!='!') {

p=(stack)malloc(sizeof(Snode)); p->ch=ch;

p->next=top; top=p;

scanf(\ getchar(); }

while(top->next!=NULL) {

printf(\ top=top->next; }

printf(\}

//All copyright are preserved bycobby /*进栈与出栈*/ #include #include #define NULL 0 typedef struct node {

char ch;

struct node *next; }Snode,*stack; main() {

stack s,top,p; char ch; int choice;

s=(stack)malloc(sizeof(Snode)); s->ch='!';

s->next=NULL; /*建立栈底指针*/ top=s;

scanf(\ getchar();

while(ch!='!') {

p=(stack)malloc(sizeof(Snode));


数据结构.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2015年浙江事业单位笔试真题5.23综合应用能力E类 试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: