未完成数据结构题目

#include<iostream>
#include<stdlib.h>
using namespace std;

typedef struct Position
{
int Element;
struct Position*base;
struct Position *next;
}Position, *LinkList;

LinkList CreateList(LinkList& p)
{
LinkList head;
p=head= (LinkList) malloc(sizeof(Position));

printf("Please input 4 numbers:");
for (int i = 0; i < 4; i++)
{
cin >> p->Element;
p->next = (LinkList) malloc(sizeof(LinkList));
p = p->next;
}
p->next = head;
return p;
}

void main()
{
int n=5,x,y;
LinkList p,q;
CreateList(p);

cout << "Please input x and y:" << endl;
cin >> x >> y;
for (int i=1; i < y - 1; i++)
p = p->next;
q = (LinkList) malloc(sizeof(Position));
q->Element = x;
q->next = p->next;
p->next = q;
for (int i = 1; i < 5- x; i++)
p = p->next;

while ()
{
cout << p->Element<<" ";
p = p->next;
}

}

  1 //假设带表头结点的单向链表头指针为head,试编写一个算法将值为5的结点插入到连接表的第k个结点前,删除第k个节点,并对该链表进行排序。
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <malloc.h>
  5 #include <time.h>
  6 struct NODE {
  7     int          data;
  8     struct NODE *next;
  9 } H,*head,*p,*q,*s1,*s2,*s3,*s4,*s;
 10 int i,j,k,n,t,m;
 11 int main() {
 12     srand(time(NULL));
 13 
 14     //填写头节点数据
 15     H.data=-1;
 16     H.next=NULL;
 17     head=&H;
 18 
 19     //创建10个节点的单链表
 20     p=head;
 21     for (i=0;i<10;i++) {
 22         q=(struct NODE *)malloc(sizeof(struct NODE));
 23         if (NULL==q) return 1;
 24         q->data=rand()%100;//填写0..99的随机值
 25         q->next=NULL;
 26         p->next=q;
 27         p=q;
 28     }
 29 
 30     //输出整个单链表
 31     s=head->next;
 32     while (1) {
 33         if (NULL==s) {
 34             printf("\n");
 35             break;
 36         }
 37         printf("%02d->",s->data);
 38         s=s->next;
 39     }
 40 
 41     //将值为5的结点插入到单链表的第k个结点前
 42     k=3;
 43     n=0;
 44     p=head;
 45     while (1) {
 46         if (NULL==p) {
 47             break;
 48         }
 49         n++;
 50         if (k==n) {
 51             q=(struct NODE *)malloc(sizeof(struct NODE));
 52             if (NULL==q) return 1;
 53             q->data=5;
 54             q->next=p->next;
 55             p->next=q;
 56             break;
 57         }
 58         p=p->next;
 59     }
 60 
 61     //输出整个单链表
 62     s=head->next;
 63     while (1) {
 64         if (NULL==s) {
 65             printf("\n");
 66             break;
 67         }
 68         printf("%02d->",s->data);
 69         s=s->next;
 70     }
 71 
 72     //删除第k个节点
 73     k=5;
 74     n=0;
 75     p=head;
 76     while (1) {
 77         if (NULL==p) {
 78             break;
 79         }
 80         n++;
 81         if (k==n) {
 82             q=p->next;
 83             if (q) {
 84                 p->next=q->next;
 85                 free(q);
 86             }
 87             break;
 88         }
 89         p=p->next;
 90     }
 91 
 92     //输出整个单链表
 93     s=head->next;
 94     while (1) {
 95         if (NULL==s) {
 96             printf("\n");
 97             break;
 98         }
 99         printf("%02d->",s->data);
100         s=s->next;
101     }
102 
103     //从小到大排序
104     for (p=head;p!=NULL && p->next!=NULL;p=p->next) {
105         for (q=p->next;q!=NULL && q->next!=NULL;q=q->next) {
106             if (p->next->data > q->next->data) {
107 
108                 //交换data
109 //              printf("swap %02d %02d\n",p->next->data,q->next->data);
110 //              t=p->next->data;p->next->data=q->next->data;q->next->data=t;
111 
112                 //或者
113 
114                 //交换next
115 //              printf("swap %02d %02d\n",p->next->data,q->next->data);
116                 s1=p->next;
117                 s2=p->next->next;
118                 s3=q->next;
119                 s4=q->next->next;
120 
121                 if (s2!=s3) {
122                      p->next=s3;
123                     s3->next=s2;
124                      q->next=s1;
125                     s1->next=s4;
126                 } else {
127                      p->next=s3;
128                     s3->next=s1;
129                            q=s3;
130                     s1->next=s4;
131                 }
132 
133                 //输出整个单链表
134 //              s=head->next;
135 //              while (1) {
136 //                  if (NULL==s) {
137 //                      printf("\n");
138 //                      break;
139 //                  }
140 //                  printf("%02d->",s->data);
141 //                  s=s->next;
142 //              }
143 //              getchar();
144             }
145         }
146     }
147 
148     //输出整个单链表
149     s=head->next;
150     while (1) {
151         if (NULL==s) {
152             printf("\n");
153             break;
154         }
155         printf("%02d->",s->data);
156         s=s->next;
157     }
158 
159     //将单链表中前 m 个结点和后 n 个结点进行互换,m+n为链表总长10
160     m=4;
161     n=6;
162     k=0;
163     p=head;
164     while (1) {
165         if (NULL==p) {
166             break;
167         }
168         k++;
169         if (m+1==k) {
170             q=p;
171         }
172         s=p;
173         p=p->next;
174     }
175     s1=head->next;
176     head->next=q->next;
177     s->next=s1;
178     q->next=NULL;
179 
180     //输出整个单链表
181     s=head->next;
182     while (1) {
183         if (NULL==s) {
184             printf("\n");
185             break;
186         }
187         printf("%02d->",s->data);
188         s=s->next;
189     }
190 
191     //释放所有节点
192     p=head->next;
193     while (1) {
194         if (NULL==p) {
195             break;
196         }
197         q=p->next;
198         free(p);
199         p=q;
200     }
201 
202     return 0;
203 }
204 //18->94->58->17->27->20->43->57->75->78->
205 //18->94->05->58->17->27->20->43->57->75->78->
206 //18->94->05->58->27->20->43->57->75->78->
207 //05->18->20->27->43->57->58->75->78->94->
208 //43->57->58->75->78->94->05->18->20->27->
209 //

 

 1 C 加struct list 才是一种类型。
 2 
 3 struct alist{     int a;     struct alist *next; }; 
 4 
 5 C++ ,alist 就是struct alist 都是类型名。
 6 另外 C++标准库有个 list 模板
 7 所以,一般类型定义,不要定义成list 这样的名字。
 8 
 9 你把你的程序,分别存为 .c ,.cpp
10 用C,C++编译器分别编译一下,看看。
11 C一般不能通过,C++一般可以通过。
12 
13 C++ ,struct,union,class ,enum 类型定义后,不需要加struct,union,class ,enum 等 类型关键字 就是类型名字。
14 
15 C一般必须加类型名,才是一个完整的类型名字。

 

posted @ 2013-10-11 00:22  herizai007  阅读(320)  评论(0编辑  收藏  举报