㈠ 如何用c語言實現單鏈表的逆置
#include<iostream>
using namespace std;
struct Number //鏈表的類型
{
char data; //鏈表當前結點的值
struct Number *next; //鏈表當前結點指向下一結點的指針
}*number;
void CreateList(Number *&L) //創建鏈表
{
Number *s,*r; //定義兩個鏈表類型的臨時指針
char x; //定義一個臨時字元變數
L=(Number *)malloc(sizeof(Number)); //為頭結點開辟空間
L->next=NULL; //此時頭結點的後繼指針和前驅指針賦值為空
r=L; //是r指針指向頭結點
x=getchar(); //用x接受一個從鍵盤輸入的字元
while(x!='\n') //控制當輸入回車鍵時結束
{
s=(Number *)malloc(sizeof(Number)); //開辟下一結點的空間
s->data=x;
r->next=s; //r的後繼指針指向s
r=s; //是s指向r
x=getchar(); //用x接受一個從鍵盤輸入的字元
}
r->next=NULL; //當創建結束時,r的後繼指針為空
}
void PrintList(Number *L) //輸出鏈表
{
Number *p=L->next; //定義一個臨時指針並指向鏈表的第一個結點
while(p!=NULL) //判斷結點是否為空,空就結束
{
cout<<p->data; //輸出結點的值
p=p->next; //指向下一個結點
}
cout<<endl; //換行
}
void InverseList(Number *L) //鏈表的逆置
{
Number *p=L->next,*q=L->next;
q=q->next;
p->next=NULL;
p=q;
while(p!=NULL)
{
q=q->next;
p->next=L->next;
L->next=p;
p=q;
}
}
void DestroyList(Number *&L) //銷毀鏈表
{
Number *p=L,*q=p->next;
while(q!=NULL)
{
free(p); //釋放p的空間
p=q;
q=p->next;
}
cout<<"釋放鏈表"<<endl;
}
int main()
{
cout<<"請輸入一個鏈表:";
CreateList(number); //調用創建鏈表
cout<<"********************************************************************************";
cout<<"輸入的鏈表為:"<<endl;
PrintList(number); //調用輸出鏈表
InverseList(number); //調用逆置鏈表
cout<<"此鏈表的逆置為:"<<endl;
PrintList(number); //調用輸出鏈表
cout<<"********************************************************************************";
DestroyList(number); //調用銷毀鏈表的函數
return 0;
}
㈡ 請教c語言鏈表逆置問題
Status reverse(LinkList &L) {
//L指向單鏈表的表頭,演算法將單鏈表逆轉,L指向逆轉後的表頭。
if (L==NULL ) return OK;
else if (L->next ==NULL) return OK;
p=L; q = p->next;
L->next = NULL;
while (q!=NULL){
Lnode * tem = q ->next;
q ->next = p;
p = q;
q = temp;
}
L = p;
return OK;
}
你看怎麼樣?
㈢ 在C語言中「%c%c\n」和「%d%d\n「分別說明什麼。。。
%c%c 和%d%d 出現在輸出語句中具有如下意義:
%c%c 表示輸出兩個字元數據,%d%d 表示輸出兩個十進制整型數據。
並且輸出的數據是緊挨著的,如果想分開點,可以增加寬度,比如"%5d"就是按照5的寬度輸出一個整型數據,或者在兩個格式符中間加上空格,逗號,等其他字元也可以,比如"%d,%d"。
(3)c語言值逆置擴展閱讀:
常用的有以下幾種格式字元:
一、d格式字元。用來輸出十進制整數。有以下幾種用法:
1、%d,按整型數據的實際長度輸出。
2、%md,m為指定的輸出欄位的寬度。
3、%ld,輸出長整型數據。
二、o格式符,以八進制整型式輸出整數。
三、x格式符,以十六進制數形式輸出整數。
四、c格式符,用來輸出一個字元。
㈣ 1.利用隊列的基本操作實現棧的逆置 2.利用隊列的基本操作取隊尾元素的值(隊列不變) 用c語言寫這
隊列是種先進先出的數據結構
而棧是種先進後出的數據結構
所以將一個棧中的數據彈出排入到隊列
然後從隊列中進行出隊再壓入棧即可完成棧的逆置
第二個可以設置一個隊尾指針然後取出該指針指向的元素中的值而不刪除該元素即可
如果代碼不想自己寫的話
我可以有償代勞
㈤ 寫C語言要求從鍵盤上輸入一個3位的數值,並將其逆序輸出
可以輸入值的范圍是0~32767
int main(){
int a,*p;
printf("\nPlease input the number:");
scanf("%d",&a);
while(a>0)
{
printf("%d",a%10);
a=a/10;
}
}
㈥ C語言:用棧來逆置一個單鏈表,哪位大神能給出下面代碼的詳細的解釋謝謝
#include <stdio.h>
#include<stdlib.h>
#define stacksize 100
typedef int datatype;//這里所謂的datatype關鍵字是不存在的,所以這里用typedef (類型定義) 定義成int 型,意思是datatype 就是int
typedef struct
{
datatype data[stacksize];
int top;
}seqstack;//這里定義了棧(其實就是結構體,裡面有個int型的數組和int型的成員),在下面有棧的一些運算,
typedef struct node
{
datatype data;
struct node *next;
}listnode;//這里定義了鏈表。int 型成員和 node * 指針
typedef listnode *linklist;//定義linklist指針,就是listnode 類型的指針
linklist h;
linklist p;
int x;
linklist creatlist(int n) //這里是創建鏈表
{
linklist h;
listnode *p1,*p2;
int i;
h=(linklist)malloc(sizeof(listnode));/*這里是為 h 這個結點(或者可稱為結構體,它本來的面目),申請內存空間,大小就是(sizeof(listnode),就是結構體所佔大小)*/
h->next=NULL; /*逆置單鏈表初始為空*/
p2=h;
printf("請輸入鏈記錄!:
");
for(i=0;i<n;i++)//這里就輸入n個記錄,比如1,2,3,4,5
{
p1=(linklist)malloc(sizeof(listnode));//同上
scanf("%d",&p1->data);//輸入該節點中的數據成員data的值
p1->next=p2->next; /*將當前處理節點p插入到逆置L的表頭*/
p2->next=p1;
p2=p1; /*p指向下一個待插入的節點*/
}
return (h);
}
void print(linklist h,int n)//將該鏈表列印出來
{
if(h==NULL)
printf("鏈表為空!
");
printf("這%d個鏈記錄是:
",n);
p=h->next;
printf("%d",p->data);
x=1;
while(p->next!=NULL)
{
x++;
p=p->next;
printf("%4d",p->data);//這里就是P指針一直指向next, 循環列印,直到p=NULL..
if(!(x%10))
printf("
");// - -這里應該是每列印10次就換行的意思。
}
}
datatype push(seqstack *s,int x) /*這里就是棧的操作,進棧,返回類型為datatype,實際上就是int,這里說下參數,第一個參數是指向棧的指針類型,第二個參數是你要進棧的值*/
{
if(s->top==stacksize-1)//超出棧的大小
printf("堆棧溢出!
");
else
s->data[++s->top]=x;
}
datatype pop(seqstack *s) //和上面相同,這個是出棧,return 棧的元素的值
{
if(s->top==-1)
printf("堆棧為空!
");
else
return (s->data[s->top--]);
}
datatype deleted(linklist h)//刪除鏈表結點的值,並將該結點中data值放到temp
{
datatype temp;
linklist p;
p=h->next;
temp=(p->data);
h->next=p->next;
free(p);//這步重要!釋放結點所佔的空間
return (temp);
}
void invertedlist(linklist h,int n)//
{
seqstack s;
int i,j,temp;
s.top=-1;
for(i=0;i<n;i++)//說白了就是將鏈表的值依次進棧
{
temp=deleted(h);
push(&s,temp);
}
for(i=0;i<n;i++)//然後將各個值依次出棧
{
temp=pop(&s);
printf("%5d",temp);
if(!((i+1)%10))
printf("
");
}
printf("
");
}
main()
{
linklist h;
int n;
printf("請輸入n的值:
");
scanf("%d",&n);
h=creatlist(n);
print(h,n);
printf("
");
printf("經過逆置,鏈記錄為:
");
invertedlist(h,n);
system("pause");
return 0;
}
最後總結,原理就是利用棧的先進後出的特性來實現逆置的。有什麼不懂可以再提問。
㈦ C語言: 編寫程序,實現一維數組中元素的逆置。
#include<stdio.h>
intmain(){
inti,t,n,a[10];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}
for(i=0;i<n;i++)
printf("%d",a[i]);
return0;
}
//運行示例:
㈧ c語言逆序輸出三位數
這個程序思路很簡單,就是每次取a的最後一位輸出,然後將a除以10
比如說123,123%10=3就能得到最後一位,然後輸出3
再將123除以10得到12,12%10=2,輸出2
再除以10取最後一位輸出
.....
這樣循環下去,就是輸出321,其實也不一定要三位數
㈨ 數據結構(C語言)單鏈表的問題
/*
這是結果,需要的話給我個地址
------------------------
***建立含有n個數據元素的帶頭結點的單鏈表***
請輸入n = 5
請輸入第1個元素:1
請輸入第2個元素:2
請輸入第3個元素:3
請輸入第4個元素:4
請輸入第5個元素:5
依次輸出該表中各元素的值:1 2 3 4 5
將單鏈表進行逆置運算:
依次輸出逆置後表中各元素的值:5 4 3 2 1
Press any key to continue
------------------------------
*/
㈩ C語言結構體鏈表逆置中這個代碼的while循環什麼時候終止
盡管程序不全,沒有看到pa變數的類型,但是,仍然可以判定當pa變數的值為0時while循環終止。
在c語言中,常量NULL的值就是0。也就是說,當pa的值是NULL時,循環就終止了。
有什麼問題請留言