//单链表就地逆置
#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
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 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 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));