我正在C中構建一個程序,我想從0-20中插入100個隨機值到鏈接列表中。之後,我希望將這些值按照插入到列表中的相同順序壓入堆棧。有人能指點我嗎?將鏈接列表中的值插入堆棧
我的代碼:
#include <stdio.h>
#include <stdlib.h>
struct listNode{
int data;
struct listNode * nextPtr;
};
struct stackNode {
int data;
struct stackNode *nextPtr;
};
typedef struct stackNode StackNode;
typedef StackNode* StackNodePtr;
typedef struct listNode ListNode;
typedef ListNode * ListNodePtr;
void push(StackNodePtr *topPtr, int info);
void printStack(StackNodePtr currentPtr);
void insert(ListNodePtr *, int);
void printList(ListNodePtr);
int main(void)
{
ListNodePtr startPtr=NULL;
ListNodePtr startPtr1=NULL;
StackNodePtr stackPtr = NULL;
int item, i;
for(i=0;i<100;i++)
{
item = rand() % 20;
insert(&startPtr,item);
}
printList(startPtr);
while(startPtr){
push(&stackPtr,startPtr->data);
startPtr=startPtr->nextPtr;
}
printStack(stackPtr);
system("PAUSE");
return 0;
}
void insert(ListNodePtr *sPtr,int value)
{
ListNodePtr newPtr,previousPtr,currentPtr;
newPtr = (ListNodePtr)malloc(sizeof(ListNode));
if(newPtr!=NULL){
newPtr->data=value;
newPtr->nextPtr=NULL;
previousPtr=NULL;
currentPtr=*sPtr;
while(currentPtr!=NULL && value>currentPtr->data){
previousPtr=currentPtr;
currentPtr=currentPtr->nextPtr;
}
if(previousPtr==NULL){
newPtr->nextPtr=*sPtr;
*sPtr=newPtr;
}
else{
previousPtr->nextPtr=newPtr;
newPtr->nextPtr=currentPtr;
}
}
else
printf("%d not inserted! No memory!\n",value);
}
void printList(ListNodePtr c)
{
if(c==NULL){
printf("List is empty\n");
}else{
printf("The List is:\n");
while(c!=NULL){
printf("%d --> ",c->data);
c=c->nextPtr;
}
printf("NULL\n\n");
}
}
void push(StackNodePtr *topPtr, int info) {
StackNodePtr newPtr;
newPtr=malloc(sizeof(StackNode));
if(newPtr!=NULL) {
newPtr->data=info;
newPtr->nextPtr=*topPtr;
*topPtr=newPtr;
} else
printf("%d not inserted. No "
"memory.\n", info);
}
void printStack(StackNodePtr currentPtr) {
if (currentPtr == NULL) {
printf("Stack is empty.\n\n");
} else {
printf("The stack is:\n");
while (currentPtr != NULL) {
printf("%d --> ", currentPtr->data);
currentPtr = currentPtr->nextPtr;
}
printf("NULL\n\n");
}
}
其實我這樣做,現在無論整數插入它插入堆棧以及列表中,但以相反的順序。
i。從0-20在鏈接列表中插入件100個的隨機值..現在我想要被插入在相同的順序具有相同的值成可經由堆棧:
用於初始化隨機整數的數組編號推送功能.. – user3277037
你的問題是什麼?你面臨的問題是什麼? – Wajahat
你的代碼不會創建0..20的隨機鏈表;他們從0..18。也就是說,拋出第二個for循環,並將棧push()調用移動到與列表insert()相同的循環體中。假設你的職能真的有效,那我留給你解決,如果他們不這樣做的話。代碼中其他許多錯誤的東西與你的問題不同,這個問題起初有點模糊。 – WhozCraig